API仕様


概要

APIは現状認証とdat取得の2ステップから成る
一度認証が通れば、session keyが払い出され、それを使ってdatを取得できる

2018.2.7 : api.2ch.net廃止 認証鯖はapi.5ch.netへ移行

2022.4.1 : 専ブラのユーザーエージェントでの書き込みにもキーが必須に

認証

必要なのはAppKey, HMKey
1. HBを計算する
* HMKeyは共通で、
    DgQ3aNpoluV1cl3GFJAqitBg5xKiXZ
* アルゴリズムはHMAC, Hash関数はSHA256
* 10桁の文字列(以後CTと呼ぶ)を生成(多分なんでもOK)
* AppKeyとCTを結合した値がHBの元になるmessage

例)python

import hmac
import hashlib

AppKey = 'xxfvFQcOzpTBvwuwPMwwzLZxiCSaGb'
HMKey = 'DgQ3aNpoluV1cl3GFJAqitBg5xKiXZ'
CT = '1234567890'
message = AppKey + CT
HB = hmac.new(HMKey, message, hashlib.sha256).hexdigest()

2. 認証用URLに接続し、セッションID (以降sidと呼ぶ)を取得する
* URLは https://api.5ch.net/v1/auth/
* メソッドぱPOST
* ヘッダは以下推奨
 User-Agent: 
 X-2ch-UA: JaneStyle/3.80
 Content-Type: application/x-www-form-urlencoded
* 渡すパラメータはID,PW,KY,CT,HB
 ID,PWは浪人ログインする場合のものである。浪人しない場合、空でOK
 KYはAppKey、CTは上で生成した任意の10桁の文字列、HBは1のステップで計算した値
* セッションIDの本体は、戻ってきた値の「Monazilla/1.00:」以降の部分、有効期限は24時間
 HTTP/1.1 401 Unauthorizedがサーバーから帰ってきた場合はsid期限切れであり、再度sidを取得する

例)python

import urllib
import urllib2
url = 'https://api.5ch.net/v1/auth/'
values = {'ID' : , 'PW' : , 'KY' : AppKey, 'CT' : CT, 'HB' : HB }
headers = { 'User-Agent' : '', 'X-2ch-UA': 'JaneStyle/3.80'}
data = urllib.urlencode(values)
req = urllib2.Request(url, data, headers)
response = urllib2.urlopen(req)
sid = response.read()
sid = sid.split(':')[1]

DAT取得

1. hobo値の計算
* HBと同じ鍵を使い、同じくHMAC SHA256で計算する
* 必要なのはSID, AppKey, 及び取得先のサーバー名、板名、スレID
* "/v1/[鯖名]/[板名]/[スレID][SID][AppKey]"がhoboの元になるmessage

例) python, anago.2ch.net/software/1424327586 を取得する
import hmac
import hashlib

AppKey = 'xxfvFQcOzpTBvwuwPMwwzLZxiCSaGb'
HMKey = 'DgQ3aNpoluV1cl3GFJAqitBg5xKiXZ'
sid = '4163736E9042H9074B2156E8022B8111Q4926V7274D5439D5725C863N0515G1131S1304y7065Q0829p6706Q7501C0869t1111o0789m8973o4609Q8140z1737B6239Y5582V2994653e1995Y7835D1409Y7347m8532S8306X13'
message = "/v1/anago/software/1424327586" + sid + AppKey
hobo = hmac.new(HMKey, message, hashlib.sha256).hexdigest()

2. datの取得
* URLはhttps://api.5ch.net/v1/[鯖名]/[板名]/[スレID] 
* メソッドはPOST
* ヘッダは以下推奨
 User-Agent: Mozilla/3.0 (compatible; JaneStyle/3.80..)
 Connection: close
 Content-Type: application/x-www-form-urlencoded
 Accept-Encoding: gzip
* 渡すパラメータはsid, hobo, appkey
 sidはSID, hoboは上記1で計算した値、appkeyはAppKey

例)python anago.2ch.net/software/1424327586 を取得する

import urllib
import urllib2
AppKey = 'xxfvFQcOzpTBvwuwPMwwzLZxiCSaGb'
sid = '4163736E9042H9074B2156E8022B8111Q4926V7274D5439D5725C863N0515G1131S1304y7065Q0829p6706Q7501C0869t1111o0789m8973o4609Q8140z1737B6239Y5582V2994653e1995Y7835D1409Y7347m8532S8306X13'
hobo = 'acb4d0d419b8960674845b3055d030c9b7923f54fbeea4eba38aa539b2560329'
url = 'https://api.5ch.net/v1/anago/software/1424327586'
values = { 'sid' : sid, 'hobo' : hobo, 'appkey': AppKey }
headers = { 'User-Agent' : 'Mozilla/3.0 (compatible; JaneStyle/3.80..)'}
data = urllib.urlencode(values)
req = urllib2.Request(url, data, headers)
response = urllib2.urlopen(req)
dat = response.read()

サンプル


仕様書

Pythonのサンプル

Rubyのサンプル

node.jsのサンプル

新仕様での書き込み

新仕様のリクエスト文(ChMate 0.8.10.153の場合)

X-PostSig: 22dfe8a70e451907dd5c7ed83c************
X-APIKey: 8yoeAcaLXiEY1FjEuJBKgkPxirkDqn
X-PostNonce: 1650465780.209
X-MonaKey: 506327d4c3ca080fe71242f40d05ca8***********
User-Agent: Monazilla/1.00 2chMate/0.8.10.153 Dalvik/2.1.0 (Linux; U; Android 12; ***** Build/******)
X-2ch-UA: 2chMate/0.8.10.153
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Content-Length: 116
Host: mi.5ch.net
Connection: Keep-Alive
Accept-Encoding: gzip

FROM=&mail=sage&MESSAGE=test&bbs=news4vip&key=16504****&submit=%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%82%80&time=1650465780


・X-APIKey
→=AppKey

・X-PostNonce
unixtimeのような文字列
専ブラによって小数点以下の有無に差があるため以下参照

・X-PostSigの計算
以下形式の文字列をmessageとしてDAT取得のhoboと同じ手順で計算
bbsName<>threadKey<>unixtime<>name<>mail<>message<>newThreadTitle<>userAgent<>monaKey<><>nonce
例:
news4vip<>16504****<>1650465780<><>sage<>てすと<><>2chMate/0.8.10.153<>506327d4c3ca080fe71242f40d05ca8***********<><>1650465780.209

・X-MonaKeyの取得
00000000-0000-0000-0000-000000000000をX-MonaKeyとしてX-PostSigの署名と共に書き込むと確認画面が現れレスポンスヘッダのX-MonaKeyで取得可能

コメントを投稿するには画像の文字を半角数字で入力してください。


画像認証

  • 最終更新:2022-12-25 11:49:59

このWIKIを編集するにはパスワード入力が必要です

認証パスワード