▪️ API概要 APIは現状認証とdat取得の2ステップから成る 一度認証が通れば、session keyが払い出され、それを使ってdatを取得できる ▪️ 認証 必要なのは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.2ch.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:」以降の部分 例)python import urllib import urllib2 url = 'https://api.2ch.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.2ch.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.2ch.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()