【実体験】WordPressにPexels画像を自動アップロードできなかった話と解決策

「自動化できた!」と思ったら盛大にコケた話

副業でブログ運営を始めて半年が経った頃、私はある野望を抱いていました。

「記事作成を全自動化して、寝てる間に収益を生み出す仕組みを作ろう!」

そのために取り組んだのが、PexelsのフリーフォトをWordPressに自動アップロードする仕組みづくりでした。会社員として毎日残業しながら副業をしている身としては、作業を自動化できるかどうかは死活問題です。ところが、これが思った以上に手こずりまして……今日はその失敗談と、最終的にたどり着いた解決策をシェアしたいと思います。

同じように「WordPressへの画像自動アップロードが失敗する」と悩んでいる方、ぜひ最後まで読んでみてください。

そもそもなぜPexels画像を自動アップロードしたかったのか

まず背景を説明させてください。ブログ記事を書くとき、毎回アイキャッチ画像を探すのって地味に時間がかかりますよね。

  • Pexelsにアクセスする
  • キーワードで検索する
  • 良さそうな画像を選ぶ
  • ダウンロードする
  • WordPressにアップロードする
  • アイキャッチに設定する

この作業、1記事につき5〜10分はかかります。月に20記事書くとしたら、それだけで最大200分=約3時間以上が画像探しに消えていく計算です。本業で疲れ切った体にはなかなかこたえます。

「PexelsにはAPIがあるし、WordPressにもREST APIがある。組み合わせれば自動化できるはずだ!」そう思い立ったわけです。

最初の失敗:認証エラーの壁

さっそくPexels APIのキーを取得して、Pythonスクリプトを書いてみました。処理の流れとしては、

  1. Pexels APIでキーワード検索して画像URLを取得
  2. 画像をダウンロード
  3. WordPress REST APIのメディアエンドポイントにPOSTリクエストで送信

という至ってシンプルな構成です。コードを書いて意気揚々と実行してみたら……

401 Unauthorized

見事に認証エラー。「あれ?IDとパスワードは合ってるのに?」と首をかしげました。

原因を調べてみると、WordPress REST APIへの画像アップロードには通常のパスワードではなく「アプリケーションパスワード」が必要だということが判明。WordPress 5.6以降に導入された機能で、ダッシュボードの「ユーザー」→「プロフィール」から発行できます。

これを知らずに詰まっていた時間、約2時間……。副業あるあるですね。

次の失敗:MIMEタイプエラー

アプリケーションパスワードを設定して再挑戦!今度こそと思ったら、別のエラーが出ました。

Sorry, this file type is not permitted for security reasons.

日本語にすると「このファイル形式はセキュリティ上の理由で許可されていません」というもの。

Pexelsからダウンロードした画像はjpgやpngのはずなのに、なぜ?と調べてみると、リクエスト時にContent-Typeヘッダーを正しく指定していなかったのが原因でした。WordPressは送信されてくるファイルのMIMEタイプを厳密にチェックするため、ここを間違えると問答無用で弾かれます。

正しくは画像ファイルに合わせて image/jpegimage/png を指定する必要があります。さらに Content-Disposition ヘッダーにファイル名も指定しないといけないという、地味にめんどくさい仕様があります。

三度目の失敗:サーバー側のファイルサイズ制限

ヘッダー問題を修正して再実行。今度はアップロード自体は成功したように見えましたが、高解像度の画像がことごとく失敗していました。

エラーを見ると 413 Request Entity Too Large。要するにファイルサイズが大きすぎてサーバーに弾かれている状態です。

レンタルサーバーの管理画面やphp.iniの設定で upload_max_filesizepost_max_size が制限されており、デフォルトでは2MBや8MBに設定されていることが多いです。Pexelsの高品質画像はそれを超えることがあります。

対策としては主に2つ。

  • サーバー側の設定を変更する(ホスティング会社によっては管理画面から変更可能)
  • Pexelsから取得する際に小さいサイズの画像URLを指定する(Pexels APIはsrc.mediumやsrc.smallなど複数サイズを返してくれます)

私は後者を選びました。アイキャッチ画像であれば src.large サイズで十分だと判断したからです。

最終的に動いたコードの概要

試行錯誤の末、ようやく安定して動くようになったポイントをまとめます。

  1. WordPressのアプリケーションパスワードを使用する:通常パスワードは使わない
  2. Content-TypeとContent-Dispositionヘッダーを正確に指定する
  3. Pexels APIから適切なサイズの画像URLを取得するsrc.largeあたりがバランス良し
  4. ファイル名にはASCII文字のみを使う:日本語ファイル名は文字化けや失敗の原因になります
  5. アップロード後にメディアIDを記録しておく:後で投稿のアイキャッチに設定するときに使います

これらを押さえるだけで、以前は30分かかっていた作業が数秒で完了するようになりました。

副業初心者へのアドバイス:失敗は「授業料」と考えよう

今回の一件で費やした時間、合計で丸1日近くはあったと思います。「その時間で記事書けたじゃん」という声もあるかもしれません(実際、夫にそう言われました)。

でも私はこう考えています。一度仕組みを作れば、その後ずっと楽になる

月20記事×毎回10分の画像作業=200分。年間では2400分、つまり40時間が節約できます。初期投資として1日使ったとしても、数ヶ月で元が取れる計算です。

副業で自動化にチャレンジするときは、最初からうまくいくと思わないことが大切です。エラーメッセージはGoogle翻訳にかけて意味を理解する、エラーコードで検索する、この2つの習慣を身につけるだけで解決速度がグッと上がります。

まとめ:WordPressへの画像自動アップロード失敗の主な原因

最後に、今回遭遇した失敗原因を整理しておきます。

  • 認証エラー(401)→ アプリケーションパスワードを使う
  • MIMEタイプエラー→ Content-Typeヘッダーを正しく設定する
  • ファイルサイズエラー(413)→ 画像サイズを小さくするかサーバー設定を変更する
  • ファイル名の文字化け→ ASCII文字のみのファイル名を使う

同じところで詰まっている方の参考になれば幸いです。自動化の道は険しいですが、一度乗り越えると本当に楽になります。一緒に頑張りましょう!

コメント

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