背景
はてなAPIを使用して、はてなフォトライフに写真をアップロードしようと考えています。というのも、slackに投稿している1日分の内容をはてなブログにまとめてポストしようと考えていまして。
アップロードで使用するPUTメソッドは色々とやらなければならないようなので、まずははてなフォトライフにある写真の情報を取得するコードを書きました。
コード
以下のような感じです。WSSEではなく、oauthを使用しています。
package main import ( "fmt" "io/ioutil" "log" "net/http" "net/url" "os" "strings" "github.com/gomodule/oauth1/oauth" ) func main() { oauthClient := &oauth.Client{ Credentials: oauth.Credentials{ Token: "xxxxx", Secret: "xxxxx", }, TemporaryCredentialRequestURI: "https://www.hatena.com/oauth/initiate", ResourceOwnerAuthorizationURI: "https://www.hatena.com/oauth/authorize", TokenRequestURI: "https://www.hatena.com/oauth/token", } accessToken := oauth.Credentials{ Token: "xxxxx", Secret: "xxxxx", } scope := url.Values{"scope": {"read_public", "write_public", "read_private", "write_private"}} req, err := http.NewRequest("GET", "https://f.hatena.ne.jp/atom/edit/20210529213650", strings.NewReader(scope.Encode())) if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } req.Header.Set("Content-Type", "application/x-www-form-urlencoded") if err := oauthClient.SetAuthorizationHeader(req.Header, &accessToken, req.Method, req.URL, scope); err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } if err != nil { log.Fatal("Get Err: ", err) panic(-1) } resp, err := http.DefaultClient.Do(req) if err != nil { fmt.Fprintln(os.Stderr, err) } defer resp.Body.Close() body, _ := ioutil.ReadAll(resp.Body) fmt.Println(string(body)) }
実行結果
以下のように情報が出力されます。
<?xml version="1.0" encoding="utf-8"?> <entry xmlns="http://purl.org/atom/ns#" xmlns:hatena="http://www.hatena.ne.jp/info/xmlns#"> <title>sample</title> <link rel="alternate" type="text/html" href="http://f.hatena.ne.jp/padobure/20210529213650"/> <link rel="service.edit" type="application/x.atom+xml" href="http://f.hatena.ne.jp/atom/edit/20210529213650" title="sample"/> <issued>2021-05-29T21:36:50+09:00</issued> <author> <name>padobure</name> </author> <generator url="http://f.hatena.ne.jp/" version="1.0">Hatena::Fotolife</generator> <id>tag:hatena.ne.jp,2005:fotolife-padobure-20210529213650</id> <hatena:imageurl>https://cdn-ak.f.st-hatena.com/images/fotolife/p/padobure/20210529/20210529213650.jpg</hatena:imageurl> <hatena:imageurlmedium>https://cdn-ak.f.st-hatena.com/images/fotolife/p/padobure/20210529/20210529213650_120.jpg</hatena:imageurlmedium> <hatena:imageurlsmall>https://cdn-ak.f.st-hatena.com/images/fotolife/p/padobure/20210529/20210529213650_m.jpg</hatena:imageurlsmall> <hatena:syntax>f:id:padobure:20210529213650j:image</hatena:syntax>
参考にした記事
以下の記事を参考にさせていただきました。