pythonの5chのdat取得するプログラム改善したんだけどこれよりよくできるやついる?
■ このスレッドは過去ログ倉庫に格納されています
Before
import hmac
import hashlib
import urllib
import urllib2
AppKey = 'xxfvFQcOzpTBvwuwPMwwzLZxiCSaGb'
HMKey = 'DgQ3aNpoluV1cl3GFJAqitBg5xKiXZ'
def authenticate():
CT = '1234567890'
message = AppKey + CT
HB = hmac.new(HMKey, message, hashlib.sha256).hexdigest()
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]
return sid
def getDAT(serverName, boardName, threadId, sid):
message = "/v1/" + serverName + "/" + boardName + "/" + threadId + sid + AppKey
hobo = hmac.new(HMKey, message, hashlib.sha256).hexdigest()
url = 'https://api.2ch.net/v1/' + serverName + "/" + boardName + "/" + threadId
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)
return response.read()
sid = authenticate()
dat = getDAT('anago', 'software', '1424327586', sid)
print dat # 暗号ハッシュ関数でメッセージ認証する標準ライブラリ
import hmac
# ハッシュ化する標準ライブラリ
import hashlib
# http通信ライブラリ
import httpx
# 文字化け対策ライブラリ
import cchardet
class authenticate_5chAPI:
def __init__(
self,
AppKey,
HMKey,
# この値は何でもいいらしいけど変更したいならインスタンス作成時に引数からどうぞ
CT="1234567890",
AppUrl = 'https://api.5ch.net/v1/auth/',
# User-AgentとX-2ch-UAはAppKeyとHMKeyと対応するものを使用。変更したいならインスタンス作成時に引数からどうぞ
headers = { 'User-Agent' : 'Monazilla/1.00 JaneStyle/4.23 Windows/10.0.22000', 'X-2ch-UA': 'JaneStyle/4.23'},
):
# インスタンス変数(作成するインスタンス毎に変数の中身が変わる)
self.AppKey = AppKey
self.HMKey = HMKey
self.CT = CT
self.App_Url = AppUrl
self.headers = headers
# セッションIDを作ってreturn
def sessionIdentifier_Create(self):
message = self.AppKey + self.CT
# python3系統ではhmac.newの引数はbytearrayで変換すること
HB = hmac.new(bytearray(self.HMKey,"ASCII"), bytearray(message,"ASCII"), hashlib.sha256).hexdigest()
values = {'ID' : '', 'PW' : '', 'KY' : self.AppKey, 'CT' : self.CT, 'HB' : HB }
response = httpx.post(self.App_Url,data=values,headers=self.headers)
#邪魔な文字列あるからsessionIDだけ上手い感じで抽出
sid = response.text
sid_split_num = len(sid.split(':')[0])+1
sid = sid[sid_split_num:]
sid = sid.split('\'')[0]
return sid
class use_5chAPI(authenticate_5chAPI):
def getDAT(
self,
serverName,
boardName,
threadId,
sid
):
message = "/v1/" + serverName + "/" + boardName + "/" + threadId + sid + self.AppKey
hobo = hmac.new(bytearray(self.HMKey,"ASCII"), bytearray(message,"ASCII"), hashlib.sha256).hexdigest()
url = self.App_Url[:-5] + serverName + "/" + boardName + "/" + threadId
values = { 'sid' : sid, 'hobo' : hobo, 'appkey': self.AppKey }
response = httpx.post(url,data=values,headers=self.headers,timeout=None)
# 文字コードにISO-8859-1が使われていて文字化けする場合は以下の1行を入れる
response.encoding = cchardet.detect(response.content)["encoding"]
return response.text
# 処理テスト用
def main():
instance = use_5chAPI(
AppKey = ',
HMKey = '',
CT = '',
AppUrl = '',
headers = { ''}
)
dat = instance.getDAT('mi', 'news4vip', '1670646031', sid=instance.sessionIdentifier_Create())
print(dat)
if __name__ == '__main__':
main() >>2
いや元から公開されてるし
このサンプル終わってるからこのkeyは使えんぞ あん?なんでID変わったと思ったら
携帯回線から書き込んでたわwifiオンにしてたのに シンタクスエラーあるぞ
あとフォーマッタくらいかけて >>8
まじで終わってるよな?このサンプル
だかは俺が3系統に対応してかつ改善してやった >>9
NGワードとか言われたから雑に消したから
変になったとこあるかも
フォーマッタね検索したらこれがでた
https://qiita.com/sin9270/items/85e2dab4c0144c79987d
検討するわ
でもさぁ、==じゃなくてis使うのって正しいの?isだと==より遅いみたいなん見たことあるけど あとisとかpython知らん人が見たらなにこれ?ってなるし
==のが無難では isについて調べた
==より早いのか
javascriptでいうところの===と同じ働きもするらしい
https://i.imgur.com/wEiiUaG.png そんな細いところ気にする必要ないだろ
何兆回と処理するならまだしもリンターに従えとしか ■ このスレッドは過去ログ倉庫に格納されています