4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AtomPubを使ってPythonでライブドアブログに画像投稿する

Last updated at Posted at 2018-07-22

#はじめに
API経由でライブドアブログに画像を投稿する際、結構苦戦してしまったので備忘録を残しておきます。

#リソースURI

ライブドアブログでは、以下のリソースURIが用意されています。
(詳しくは http://help.blogpark.jp/archives/52288925.html を参照)

画像をポストする際は、画像のコレクションURIをエンドポイントに指定します。

#使用したライブラリ

#WSSE認証のために使用 
import datetime
import hashlib
import random
import base64

#HTTPリクエストのために使用
import urllib3

#コード

def create_wsse(USER_ID,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()
    s = 'UsernameToken Username="{0}", PasswordDigest="{1}", Nonce="{2}", Created="{3}"'
    return s.format(USER_ID, base64.b64encode(b_digest).decode(), base64.b64encode(b_nonce).decode(), created)

def post_image(img_path,USER_ID,END_POINT,API_KEY):
    http = urllib3.PoolManager()
    with open(img_path, 'rb') as fp:
        binary_data = fp.read()
        r = http.request(
            'POST',
            END_POINT,
            body=binary_data,
            headers = {
                'X-WSSE': create_wsse(USER_ID,API_KEY),
                'Content-Type' : u'image/jpeg'
            })
        return r

WSSE認証の部分は http://thirotan.blog.jp/archives/1068967144.html を参考にさせて頂きました。
このpost_imageに画像のパス、ライブドアブログのユーザーID、エンドポイント、APIキーを入れれば画像をポストできます。

USER_ID = 'YOUR_USER_ID'
API_KEY = 'YOUR_API_KEY'
ENDPOINT_IMAGE = 'http://livedoor.blogcms.jp/atom/blog/{user_id}/image'.format(user_id=USER_ID)

req = post_image('path/to/img',USER_ID,ENDPOINT_IMAGE,API_KEY)
print(req.data.decode("utf-8"))
4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?