PR

livedoorブログに画像をAPIでアップロードしようと思ったときに、アップロードできず困ったときの備忘用のメモ

インフラ技術

前回から、livedoorブログを何とか手間なく使用しようとして悪銭苦戦している記事を書いています。

File Manager APIをつかう

と、その前に、これはそうだったのかと思ったことが1点

curl -X POST https://livedoor.blogcms.jp/blog/XXXX/file_manager

のような記載があり、curlだからPowerShellでいいかと思って実行するとちょっとハマるポイントがありました。

何かというと、そもそも、WindowsのPowerShellのcurlは、curlであってcurlじゃないようです。

PowerShellのcurlは実は、Invoke-WebRequestのエイリアスなようです。

どういうこと?って感じですよね。

PowerShellでcurlを打つと、Invoke-WebRequestになる

ということですね。

具体的には、

curl https://suiton-no-jutu.com/

と打っても、実際に行われるコマンドは、

Invoke-WebRequest https://suiton-no-jutu.com/

というコマンドに変わるということですね。

なので、livedoorブログのヘルプページに書かれている通り、PowerShellのcurlコマンドを使って、curl -X POST https://livedoor.blogcms.jp/blog/XXXX/file_managerと打っても、

Invoke-WebRequest : パラメーター ‘Headers’ をバインドできません。”X-LDBlog-Token:XXXXXX” の値を “System.String” 型から “System.Collections.IDictionary” 型に変換できません。

といったエラーが返ってきてしまいます。

じゃ、どうすればよいの?

いたって簡単で、curlの型ではなく、Invoke-WebRequestの型にしてあげればよいのです。

-X POST を -Method Post に

-H ‘X-LDBlog-Token: …’ を -Headers @{ “X-LDBlog-Token” = “…” } に

置き換えて、

Invoke-WebRequest -Uri “https://livedoor.blogcms.jp/blog/XXXX/file_manager/list”
-Method Post `
-Headers @{ “X-LDBlog-Token” = “XXXXX” }

としてあげればよいのです

読み替えダルっ!!

という、私のようなめんどくさがりさんに朗報です。

WindowsのPowerShellでInvoke-WebRequestだと、読み替えが発生するので、curlそのまま使いたいって場合、そのまま使える方法があります。

それは、超シンプル、

curl.exeを使う

です。

は?

って感じですよね。

いや、これ冗談ではなく、事実なのです。

curl.exe -X POST https://livedoor.blogcms.jp/blog/XXXX/file_manager/list `
-H “X-LDBlog-Token: XXXX”

としてやればよいだけなのです。

これで、思った結果が返ってきました。

めでたしめでたし。

と思いきや、、、

本題の、File Manager APIをつかうを全然書いていなかった。。

フロント系の開発の経験はないので、APIとか全然わからないので、とにかく羅列になります。

なぜなら、公式サイトは、文字列を画像で貼り付けていて、コピペができないのです。。

なので、自分メモ用に、コピペできるように文字起こしをしたいと思います。

ルートエンドポイントとパス

curl -X POST https://livedoor.blogcms.jp/blog/<blogname>/file_manager/<api_path>

<blogname> : ここは自分のブログ名を記載

<api_path> : これは以下から、選択

api_path説明
uploadファイルをアップロードする
renameファイル名を変更
create_dirディレクトリ(フォルダ)を新規で作成
listファイル、ディレクトリ(フォルダ)の一覧を取得
removeファイル、またはディレクトリ(フォルダ)の削除

つまり、WindowsのPowerShellで、ファイル、ディレクトリ(フォルダ)の一覧を取得したいときは、

curl.exe -X POST https://livedoor.blogcms.jp/blog/<blogname>/file_manager/list

としてやればいいということですね。

<blogname>に関しては、以下を参照することで確認できます。

ちなみに、共通で入れないといけないのは、

-H ‘X-LDBlog-Token: <File Manager用パスワード>’

です。

先ほどの画像にもある通り、ルートエンドポイントと同じ画面で確認できます。

なので、リストを表示したいと思ったら、以下のコマンドが正解になります。

curl.exe -X POST https://livedoor.blogcms.jp/blog/<blogname>/file_manager/list -H ‘X-LDBlog-Token: <File Manager用パスワード>’

2行で表したいときは、

curl.exe -X POST https://livedoor.blogcms.jp/blog/XXXX/file_manager/list `
-H “X-LDBlog-Token: XXXX”

まとめ

ここまでで、だいぶわかったかと思いますので、まとめとして、一通り使用できるAPIをまとめておこうと思います。

一覧表示

実行コマンド

curl.exe -X POST https://livedoor.blogcms.jp/blog/XXXX/file_manager/list `
-H “X-LDBlog-Token: XXXX”

このコマンドを実行して、

以下のような結果が返ってくると思います。

{“lists”:[],”parents”:[{“name”:””,”is_dir”:1,“id”:”XXXXX”,”is_file”:0,”is_root”:1}]}

この、idのXXXXXがファイルアップロードにおいて大事になります。

アップロード

アップロードのコマンドは、こんな感じ

curl.exe -X POST https://livedoor.blogcms.jp/blog/XXXX/file_manager/upload `
-H “X-LDBlog-Token: XXXX” `
-F “dir_id=XXXXX” `
-F “upload_data=@<file_path>\<file_name>”

という感じになります。

説明すると、先ほどと異なる箇所は、1行目の最後がuploadになっていることですね。
ファイルを上げるため、「list」ではなく、「upload」になったわけですね。

2行目は変わりなし。

3行目の黄色のアンダーラインマーカーの部分は、listで先ほど取得したidですね。
先ほどのコマンド実行結果では、idでしたが、ここでは、dir_idという値に入れるようですね。

4行目は、先ほどの3行目もですが、先頭の文字が、「-H」ではなく、「-F」になっていますね。
意味は。。。
正直調べていないので、わからないですが、意味はあるはずです。
で、upload_dataはいくつかポイントがあります。

「upload_data=」の後に「@」が必要なようです。
これも何か意味があると思いますが、よくわからないので、そういったものとして覚えています。
で、最大のポイントが、「<file_path>\<file_name>」ですね。

PC上で、「C:\data\website\」というフォルダに、「AAA.jpg」というファイルがある場合、

C:\data\website\AAA.jpgとなるわけですね。

なので、

-F “upload_data=@C:\data\website\AAA.jpg”

となります。

さっそく実行

ここまで、読み解けたので、さっそく実行。

実行した結果、

{}

という結果が返ってきました。

エラーではないようなので、実際にlivedoorブログ上の画像を確認してみようと思います。

あれ、あがっていない?

ファイル管理のほうが上がってるんかーい。

ま、記事から参照できれば問題ないか。

と思ったら、記事から参照できん。

この機能、画像を上げるというよりかは、ファイルを上げたりすることがメイン機能で、記事の画像を上げるための機能じゃないんじゃん。。。?

3時間くらいかけて、途中昼寝しつつ解読した時間がなきものになってしまった。。

ま、思ったように使えない機能ということが分かったので、良しとしましょう。

結論、

「livedoorブログの画像をAPIでアップロードしようと思ったときに、アップロードはできるけど、記事のサムネイルとして使えない」

ことがわかりました。

誰かのお役に立てれば幸いです。

タイトルとURLをコピーしました