はてなブログのAPIを叩くまで苦戦したメモ

N時間かかりました。

最終的にできたもの

なんかもうOAuthとか何もわからないよ… の気持ちになってこれができました。

import urllib.parse  
import requests  
from requests_oauthlib import OAuth1  
# build parameters to post  
consumer_key = "Authきぃ"  
consumer_secret = "Authしいくれっと"  
token_key = "APIきぃ"  
token_secret = "APIしいくれっと"  
message = """<?xml version="1.0" encoding="utf-8"?>  
<entry xmlns="http://www.w3.org/2005/Atom"  
       xmlns:app="http://www.w3.org/2007/app">  
  <title>いきしちに</title>  
  <content type="text/x-markdown">## ひみいりに  

**ぽ!!!!!!!!111**  

無事投稿できましたかな?やりましたかな?  
 </content>  
  <updated>2020-01-12T00:00:00</updated>  
  <category/>  
  <app:control>  
    <app:draft>yes</app:draft>  
  </app:control>  
</entry>  
"""  
message = message.encode()  
post_url = "https://blog.hatena.ne.jp/MireiMixin/namonakimichi.hatenablog.com/atom/entry"  

auth = OAuth1(  
    consumer_key,  
    consumer_secret,  
    token_key,  
    token_secret,  
)  

headers = {'Content-Type': 'application/xml; utf-8'}  

print(requests.post(post_url, headers=headers, auth=auth, data=message).text)  

最終的にやったこと

みたところ

反省

  • どうもGoの理解が薄めだがGoで頑張りすぎた
    • 良い勉強にはなったが動かなさすぎ + デバッグのしづらさでストレス
    • OAuthクライアント周りの話をあまり知らないのにわからない言語でやる、は事故でしかなかった
    • どうもXMLのデバッグ方法がよくわからないとなっていた。ラップされているところを一部崩して自分でOAuthのヘッダー作ってリクエストするとかしたほうが早かったかも
  • OAuth1.0あたりを本当に理解してなかった感
    • 普段出来上がってるものの保守が多いため、あんまり認証・認可を考えて来なかったツケが回ってきたなという感じ
    • あとWSSEやBASIC認証する手もあったけど、まあこれらは・・・ うん・・・ なんか個人的にやったら負け感があったのでOAuthにこだわった
    • 最初Auth用のキーとCustomerキーの違いがいまいちわかってなかったので一度発行しないといけないのがわかってなかった感
      • ついでにいうとCUIだけで完結する方法もいまいちわかってない
  • 結局ドキュメント読むのがやや辛かった
    • あれを読んでピンとこなかった感パないので地力が足らない
    • 実装サンプルもPerlやRubyと自分にとって馴染みがなく、イマイチ何をしているのかわかってなかった
  • Pythonにして1時間以内に動くところまで行ったので、やっぱり言語的にわからないもの+仕組み的にわからないものを同時学習するコスト高いなと思った
    • 今作ってるのはさっさと形にしたいのでPythonでかく
    • 余裕があったらGoで書き直そう
    • あと単純にはてなブログのAPIをGoで叩いてるケースとか、運用してるケースが見受けられなかった感じがするので、わかったことがあればちゃんと書かないとなと思った

まとめ

しんどいので今日はねます。三連休はコーディングがはかどって本当にいいと思う。