Google photo apiでアルバムの作成と作成したアルバムに写真をアップロードする

Pocket

前回の記事
でgoogle photo apiの認証方法をまとめた。
ここでは認証後にアルバム作成、アルバム取得、アルバムへの写真のアップロード方法のためのプログラムを書いたので以下にまとめる。

google photo apiアルバム取得

前回の記事
でgoogleインスタンスを取得しているので、
そのgoogleインスタンスのメソッドを利用する。

def getallalbums(google, nexttoken=None):
    data = {
        "pageToken":nexttoken
    }
    response = google.get(albums_url, params=data)
    response_json = response.json()
    for l in response_json["albums"]:
        print(l["title"])
    nexttoken = response_json.get("nextPageToken")
    if nexttoken:
        getallalbums(google, nexttoken)

これで標準出力にアルバムが一覧表示される。

google photo apiでアルバムの作成

アルバム作成は以下の通り、googleは認証後のgoogle instanceを指定して、nameはアルバム名を指定。

def create_albums(google, name):
    data = {
        "album":{
            "title": name
        }
    }
    data = json.dumps(data)
    r = google.post(albums_url, data=data)
    print(r.content)
    r = r.json()
    albumid = r["id"]
    print(albumid)

Google photo apiで写真をアルバムにアップロード

写真のアップロードは以下の通り、2回APIを実行する必要がある。写真名は日本語でもいいようにutf-8でエンコードするようにした。

def upload(google, album_id, image, name):
# imageはdictでimage["name"]で写真の名前、image["path"]写真が保存されているフルパスを想定。
        headers = {
            'Authorization': "Bearer " + str(google.token),
            'Content-Type': 'application/octet-stream',
            'X-Goog-Upload-File-Name': image["name"].encode("utf-8"),
            'X-Goog-Upload-Protocol': "raw",
        }

        with open(str(image["path"]), 'rb') as image_data:
# 写真のアップロード
            response = google.post(upload_url, headers=headers, data=image_data)
            r = response.content
            data = {
                'albumId': album_id,
                "newMediaItems":[{
                            "simpleMediaItem":
                                {"uploadToken":r.decode("utf-8")}
                        }
                    ]
                }
            data = json.dumps(data)
# 写真の登録
            google.post(media_url, data=data)

コメントを残す