【備忘録】pythonからはてなブログを自動投稿(更新)する方法<実装編>
今回の記事は前回の続きで実装編です.
pythonコードを丸ごと載せているので,前回記事で取得した情報を使って一部書き換えることで動作することができます
変更するのはsetting部分のみで,usernameにの''の間に自分のユーザーネームを入力してください.
同様に,blognameにブログの名前,blogtitleにブログのタイトル,api_keyにブログのキーを入力してください.
こちらが実装のコードとなります.
from datetime import datetime import requests as req import hashlib import random import base64 import requests # setting ----------------------------------------------------------- username = 'username' blogname = 'segoro.hatenablog.com' blogtitle = '12345678901234' api_key = '*******' draft = 'no' # yes or no # time check -------------------------------------------------------- import datetime now = datetime.datetime.now() dtime = str(now.year)+"""-"""+str(now.month)+"""-"""+str(now.day)+"""T"""+str(now.hour)+""":"""+str(\ now.minute)+""":"""+str(now.second) # function --------------------------------------------------------- def create_data(title,body): template = """<?xml version="1.0" encoding="utf-8"?> <entry xmlns="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app"> <title>{0}</title> <author><name>{1}</name></author> <content type="text/html"> {2} </content> <updated>{3}</updated> <category term="" /> <app:control> <app:draft>{4}</app:draft> </app:control> </entry> """
data = template.format(title, username, body, dtime, draft).encode() return data def post_hatena(data): headers = {'X-WSSE': wsse(username, api_key)} url = 'http://blog.hatena.ne.jp/{0}/{1}/atom/entry'.format(username, blogname) r = requests.post(url, data=data, headers=headers) def get_hatena(data): uri = 'https://ipocalender.hatenablog.com/entry/IPOsummary/2021/Nov' url = 'https://blog.hatena.ne.jp/{0}/{1}/atom/entry/{2}'.format(username, blogname, blogtitle) r = requests.get(uri, auth=(username, api_key)) def wsse(username, api_key): created = datetime.datetime.now().isoformat() + "Z" b_nonce = hashlib.sha1(str(random.random()).encode()).digest() b_digest = hashlib.sha1(b_nonce + created.encode() + api_key.encode()).digest() c = 'UsernameToken Username="{0}", PasswordDigest="{1}", Nonce="{2}", Created="{3}"' return c.format(username, base64.b64encode(b_digest).decode(), base64.b64encode(b_nonce).decode(\ ), created) if __name__ == '__main__': title = 'test' print(dtime) data = create_data(title, dtime) put_hatena(data)