YouTube Data API でサーバの IP アドレスを許可したのに、ちょっとつまづいた件

YouTube ロゴ

API キーの設定で、 IP アドレスをちゃんと入れたのに…

さくらの VPS で借りてる開発用サーバで YouTube Data API を使って YouTube 動画の情報を取得しようと、playlist_id と api_key をそれぞれ変数で指定して、PHP で

$playlist = file_get_contents( 'https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId=' . $playlist_id . '&maxResults=10&key=' . $api_key );

$youtube_info = json_decode( $playlist );

ってな感じで動画情報を取得しようとしたら、うまくいかない。

そこで取得した $playlist を

var_dump( $playlist );

で見てみると、

HTTP request failed! HTTP/1.0 403 Forbidden;

ってな具合のメッセージが。403 エラーってことだからアクセス権限が無いよってことだ。

うーんちゃんと下記のようにアクセスできるようにしたはずなのに。

YouTube Data API v3 設定画面

うーん、最初は file_get_contents 関数が使えないのかな? とも思ったけど、アプリケーションの制限を「なし」にするとうまく行くのでそうではない。

そこでブラウザでアクセスしてみることに

じゃあ、ってことで

https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId={playlist_id}&maxResults=10&key={api_key}

の URL (実際には {playlist_id } と {api_key} のところにはそれぞれ実際の ID と API KEY が入る) に、手元のブラウザでアクセスしてみると、

{
 "error": {
  "errors": [
   {
    "domain": "usageLimits",
    "reason": "ipRefererBlocked",
    "message": "The calling IP address XXX.XXX.XXX.XXX does not match the IP restrictions configured on the API key. Please use the API Console to update your key restrictions.",
    "extendedHelp": "https://console.developers.google.com/apis/credentials?project=XXXXXXXXXX"
   }
  ],
  "code": 403,
  "message": "The calling IP address XXX.XXX.XXX.XXX does not match the IP restrictions configured on the API key. Please use the API Console to update your key restrictions."
 }
}

ってな具合のメッセージが出た (IPアドレスとかは XXX で伏せ字にしてます) 。

この IP アドレスは API KEY の設定で許可されてないからね。そこでこの IP アドレスを許可してみると、問題なくアクセス出来て動画情報がずらずらっと。

まあ普通こうなるわな…

そこで今度はサーバ上の emacs の eww でアクセス

じゃあなんで開発用サーバだけ駄目なんだよと、うーんと悩んでみたけど、ああそうだと思いつき、開発用サーバに入っている emacs の eww (テキストベースのブラウザ)でアクセスしてみることに。

すると上記と同様のメッセージが出た。ところがアクセス許可されてないよっていう IP アドレスのところを見ると IPv6 のアドレスになっている。

ってことで、その IPv6 アドレスを、許可する IP アドレスに設定してみると、無事 API にアクセスできた。

なんとも無いことだったけど、普通にさくらの VPS に Ubuntu を入れて使っているのだが、 ググった限りでは同じ問題に直面したと思われる人は見つからず。

おいらが、この辺のサーバの設定とかがわかっていないだけなのかな。まあ、とにかく問題解決できたので、よかったと

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です