【Web API入門】Web APIを利用して、画像を自動収集してみよう!

このチュートリアルでやること

このチュートリアルでやることは、以下のとおりです。

  • 総勢120人以上いるAKBメンバー一人ひとりに対して
  • 一人50件分の画像URLをWeb APIから取得
  • そのデータをCSVに保存

といったものになっています。

学習内容としては

  • Pythonを利用したRequestsモジュールの使い方
  • Microsoft Bing Image Search APIの利用方法

について学びます。

学習内容

  • Pythonを利用した、Web APIの利用方法を学びます。
  • 環境構築も不要で、Googleアカウントがあれば簡単に実行できる、Google Colaboratoryを利用します。
  • Web APIのリファレンスを自力で読んで、Bing Image Search APIを利用することができるようになる。
  • Web APIの理解が深まり、ほかのAPIも利用できるようになる

受講における必須条件

  • Windows / MacなどのPCが利用できる方
  • Google Chromeをインストールできる方
  • クレジットカードを持っていること(APIの利用で使います。APIの使用料金はかかりません。)

Web APIとは?

Web APIは、とても簡単に言うと、外部サービスを通信によってデータのやりとりができる窓口です。

例えば、今回はツイッターのAPIを例に説明しましょう。 ツイッターは、普通Webブラウザ、もしくはスマホアプリ経由でアクセスして、以下の行動をとることができると思います。

  • ツイートの作成
  • ツイートの削除
  • プロフィールの更新
  • ほかの人のツイートのいいね ただし、例えばツイートの作成をするためには、
  • ツイッターのアプリにログインする
  • ツイッター投稿画面に移動する
  • ツイッター投稿画面に入力する

ツイッター投稿画面から、送信をクリックする といった動作がWebブラウザを通して、手動でいちいちポチポチしていく必要がありますよね。

これらの動作を、HTTPという通信方式を利用して、データの窓口に「投稿しろ!」と命令として送ると、一発で自動でやってくれるのですが、その窓口がWeb APIとなります。 僕らがネットからサイトでデータにアクセスするとき、投稿するとき、更新するとき、削除するとき、僕らはHTTPという通信を使っています。

そして、そのデータをほかのサイトから扱うときの窓口をしてくれているのがWeb APIなのです。

例えばこちらからPythonを実行して、あるアプリケーション(今回の場合はツイッター)に向けて命令の通信を送信すると、ツイッターの情報の受信・送信・更新・消去ができるような窓口Web APIから、ツイッター内部のデータを編集したり作成したりすることができるのです。 Web APIは共通の方式で外部のデータを公式に取得したり、投稿できたりできるので、外部サイトの情報をうまく利用する方法として、適しています。

Web APIのメリット

Web APIを使うメリットとしては、

  1. アプリケーションとアプリケーションを通信によってつなげることができるようになるので、多機能はアプリケーションを作れる
  2. 人間が手動で行うと、大変な繰り返しも、HTTPの通信によって自動取得が容易になる といった点があります。 ①に関しては、例えばPeingなどのアプリケーションでは、ツイッター上で質問に対して回答ができるようになっています。

 

あれはツイッターのAPIを利用して、外部アプリケーションから回答用の質問をAPI経由で送信して、ツイッター上で投稿できるようにしているのです。 ほかにも、例えば「あるユーザーの過去100件のツイートをCSVにエクスポートしたい」といった場合、手動でやるのはとても大変ですよね。これをWeb APIを経由してやると、数秒で簡単にダウンロードできてしまうわけです。

Web APIを利用するにあたって覚える知識

それでは、さっそくWeb APIを学ぶ上で必要な知識を学びましょう。

HTTP(Hypertext Transfer Protocol)

HTTPは、難しくいうと、

HTMLなどのコンテンツの送受信に用いられる通信プロトコルである。主としてWorld Wide Webにおいて、WebブラウザとWebサーバとの間での転送に用いられる。日本標準仕様書ではハイパテキスト転送プロトコルとも呼ばれる。(wiki https://ja.wikipedia.org/wiki/Hypertext_Transfer_Protocol) らしいです。。。。。

でもまぁよくわからんって感じなので、ただのインターネットの通信の一つだと思ってください。 さて、さっそくAPIを使うために、HTTPの通信について学びたいと思います。ここでは、以下の4種類を学んでいきましょう。

CRUD Create Read Update Delete
URL (エンドポイント・リクエストURL) APIが呼び出されるURL
リクエストヘッダーと認証 認証情報などが入る
リクエスト ボディ 送信したいデータが入る

CRUD (CREATE READ UPDATE DELETE)

まず、CRUDです。CRUDはCreate, Read, Update, Deleteの略称です。実は、僕らがネットで通信しているときって、実際以下の4つの処理しかしていないんですよね。左が具体的な操作、右が実際にHTTPで通信するときの言葉です。

  • CREATE: 作成 ⇒ POST :ツイートの投稿、新規アカウントの作成等
  • READ:読み取り ⇒ GET :ツイートの閲覧、プロフィールの閲覧等
  • UPDATE:更新 ⇒ PUT :プロフィールの更新等
  • DELETE:削除 ⇒ DELETE :ツイートの削除等 CREATEは、その名の通り、作成です。

例えば、ツイッターで投稿する場合は、投稿を送信することになりますので、HTTPでCREATEアクションを行います。

CREATEアクションは、HTTPだとPOSTというアクションを行うわけです。CREATE = POSTだと覚えてもらって、大丈夫だと思います。

READは、その他の通り読み取りです。例えば、「〇〇さんのツイートを取得したい」ってときはそのURLにREADアクションを行います。READアクションはHTTPだと、GETリクエストを送ることになります。

何かしらの情報を送るのではなく、単純に見たいのであれば、GETというリクエストを送ることになります。

UPDATEは、その名の通り、更新です。例えば、「すでに書いてある自分のプロフィールを更新したい」という場合、更新することになります。その場合は、UPDATEアクションになります。HTTPの通信だと、PUTというリクエストを送ることになります。

DELETEはその名の通り消去です。例えば、「昨日投稿したツイートを削除したい」という場合、ツイートに対してDELETEアクションを実行します。そういうときは、HTTPでDELETEというリクエストを送ることになります。

Web APIを利用するときは、この4種類のリクエストを送ることで、情報を取得したり、投稿したり、更新したり、削除したりすることができるわけです。

URL (エンドポイント・リクエストURL)

Web APIからデータを受信したり、送信したりする部分のURLです。エンドポイントとも呼ばれます。

リクエストヘッダーと認証

次に、リクエストヘッダーです。

さて、あなたがツイッターにログインするとします。。その時に、あなたがあなたである証明できるコードを、実は常に通信の一部の中に埋め込んでいるわけです。

HTTPには実はHTTPヘッダーという部分と、HTTPボディという二つの部分に大きく分かれています。

この、リクエストヘッダーの部分に、あなたがあなたであるという認証の暗号が埋め込まれているわけですね。

ちなみにこの認証の暗号がないと、例えばあなたのツイッターのアカウントに、悪意のあるユーザーが勝手にログインして、勝手にツイートを削除したり、勝手にツイートしてしまうことが可能になってしまします。

そうなってしまうと困るので通信の中には自分の認証コードをHTTP ヘッダーに含める必要があるわけです。

あとHTTP Headerには、今ログインしようとしているのがパソコンなのか、スマホなのかという情報も実は埋め込んだりしています。

どのサイトにアクセスするかによって、リクエスト の中身はかわります。

また、HTTPのリクエストの中身を、実際にブラウザ上から見ることも可能です。詳しい情報は、WindowsならF12ボタンを押して、開発者ツールを開くと、どんな通信を行っているかわかるかと思います。 今回は、APIキーという値をリクエストヘッダーに入れて、認証を行うことになります。

リクエスト ボディ

リクエストメッセージボディには、さきほどログインするときに入れたような情報を埋め込むことができます。名前とか、パスワードとかそういう値ですね。情報を送る場合なので、POSTリクエストを送るときが一番使われます。 今回だと

  • 翻訳するキーワードの文字列
  • 何個分の画像を取得するかの値 となります。