メモ@inudaisho

君見ずや出版 / 興味次第の調べ物置き場

はてなブログのAtomPub (Python3)

AtomPub

 いままではてなAPIあるの知らずに使ってた。よくもまぁ文字化けなおせとか無神経な要求をはてなの運営にしてたものだ。ちょっといじってみたけどこれなら自分でなんとかできそう。まぁ文字化けは対応してくれた方がよかったが、これだけ自由にいじれるならそんなことでゴタゴタ言わなければよかった。ただRubyなら便利なライブラリがあるものの、Python3 は自分でなんとかしなければならない。そもそもこのAtomPub、一覧取得なども順番に全部取っていくしかなく、あれこれいじるとなると、結局簡単なブログ管理システムを作ることになる。そういうの面倒くさいからブログサービス使ってるんだけどな。そこからちょっと頑張れば自作ブログへの道が開けてしまうのだがまぁいいか。

とりあえず今日試した事をまとめとく

GET (一覧取得)

import requests,os
sHid = "はてなID"
sBid = "ブログID"

#コレクションURI
sCol = "https://blog.hatena.ne.jp/{}/{}/atom/entry".format(sHid,sBid)

sColTxtFile = "coltxt"
sColTxt=""
if not os.path.exists(sColTxtFile):
    oRes = requests.get(url=sCol,auth=(sHid,sKey))
    sColTxt=oRes.text
    open(sColTxtFile,"w").write(sColTxt)
print( open(sColTxtFile).read())

 next属性のpageの番号をgetの値にしてどんどん次のページを取っていくやりかたで、図書館のあれだ。全件取得が前提のやつだ。

POST (新規投稿)

 非公開の実験ブログの方でたくさんデータ投げて遊んだ。同じデータを何回でも書けるので楽しい。

import requests,html,os
sHid = "はてなID"
sBid = "ブログID"

#コレクションURI
sCol = "https://blog.hatena.ne.jp/{}/{}/atom/entry".format(sHid,sBid)

sData = """<?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>
  <author><name>{}</name></author>
  <content type="text/plain">{}</content>
  <updated>{}</updated>
  <category term="宇宙" />
  <category term="ロシア" />
  <app:control>
    <app:draft>{}</app:draft>
  </app:control>
</entry>"""


sName = sHid
sTitle = "ロシアの新兵器"
sContent = """

宇宙です
ロシアです

"""
sUpdate=""
sDraft=""
sData = sData.format(sTitle,sName,html.escape(sContent),sUpdate,sDraft).encode('utf-8')
oRes = requests.post(url=sCol,auth=(sHid,sKey),data=sData)
print(oRes.text)

PUT (編集 更新)

 過去の資産いじるとき、はてな形式とかmarkdown形式とかあるが、投げる前に設定換えないといけないのは面倒だ。投げるときに指定できたら楽なんだが。

import requests,html
sHid = "はてなID"
sBid = "ブログID"

#コレクションURI
sCol = "https://blog.hatena.ne.jp/{}/{}/atom/entry".format(sHid,sBid)
sEid = "エントリーのID"
sTargetEntry =  "/".join((sCol, sEid))

sData = """<?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>
  <author><name>{}</name></author>
  <content type="text/plain">{}</content>
  <updated>{}</updated>
{}
  <app:control>
    <app:draft>{}</app:draft>
  </app:control>
</entry>"""
sContent="""
## 新しい本文

みかん

砂糖

げろ甘

<a href="http://www.asame.com">朝目新聞</a>



|國民黨|共產黨|
|蒋介石|毛澤東|

|hahha|hahahha|
|mimi|mimimi|
|4|4|

<s>あああああああああ</s>

まんじゅうこわい
"""

sName = sHid
sTitle = "まんじゅうこわい"
sCategory="" #元記事のCategoryをそのまま入れる
sUpdate = "" #元記事のUpdatedをそのまま入れる
sDraft="" #Yes|No なければそのまま公開
sData = sData.format(sTitle,sName,html.escape(sContent),sUpdate,sCategory,sDraft).encode('utf-8')
oRes = requests.put(url=sTargetEntry,auth=(sHid,sKey),data=sData)
print(oRes.text)

 まずはhttp://のアマゾンリンクをhttps://にかきかえていかんとな。しかしAtCoderしばらく頑張ってたのでたいして成長しなかったにせよ、こういうのいじるのが子供のお遊戯に見えてくる。だからおれみたいなのでもつとまってたんだな。まぁいいことだ。

 しかしXMLでなんとかしようというのは時代を感じるなー。流行り廃りの激しい業界だ。まぁでもエクセルのファイルなんかも中身はXMLになってんだから裏で無茶苦茶つかわれてるか。

↓続く

inudaisho.hatenablog.com

はてなブログ Perfect GuideBook

はてなブログ Perfect GuideBook

はてなブログカスタマイズガイド―HTML & CSSで「はてなブログ」を次のステッ

はてなブログカスタマイズガイド―HTML & CSSで「はてなブログ」を次のステッ