2018-03-03

Web APIのマッシュアップアプリ開発入門

QiitaでWeb APIを利用したマッシュアップアプリが少しバズったので、今回はWeb APIを利用した、マッシュアップアプリについて書いてみたいと思います。



Web APIを利用したマッシュアップアプリとは





「マッシュアップ」(Mash Up)という単語は「混ぜ合わせる」という意味で、もともとは音楽用語です。いろいろな曲を混ぜ合わせて(マッシュアップして)、違う曲にしてしまう手法のことです。


 転じて、Web上で使われる「マッシュアップ」は「2つ以上のWebサービス(Web API)を利用して混ぜ合わせて新しいサービスを生み出す」ことを指します。



いまさら聞けない「マッシュアップ」超入門 (1/3)

XMLで提供されているデータは加工や編集がとても手軽にできるのが特徴です。なので、「A」というWeb APIから得たXMLデータを「B」というWeb APIで利用する...... といった使い方ができるのです。もし、それぞれが勝手なフォーマットでデータを提供していたら、Web API間でデータをやりとりするのもとても大変な作業になってしまいます。

マッシュアップアプリで何ができるの?


複数のWebサービスの情報を利用することで、以下のようなアプリケーションを開発することができます。

・DMMのAPIと、ツイッターのAPIを利用して、エロ動画をツイッターに自動投稿する

・DMMのAPIとLINEのAPIを利用して、LINEでメッセージを送ったらエロ動画を返してくれる

・Slack APIを利用して、あるウェブサイトのデータをスクレイピングした後にSlackに通知する



【Python】DMM Web APIでエッチなデータを取得し、Twitterで自動でえっちな投稿してみた

Pythonでエッチなプログラムを書いてみた こんにちは、 アダルトハッカーのDAIです。 前回、DMM Web APIを利用して、新人もののAVを取得 しました。今度は取得したXML形式のデータを使って、ツイッターに投稿してみました。(ちなみにツイッターの規定を読んだところ、アダルトコンテンツの禁止条項はないようでした)

検索したDMMアダルトのサンプル動画をLINEからすぐ見れる「変態コンシェルジュ」を作ってみました

問題提起 こんにちは、DAIです。(@never_be_a_pm) アダルト動画の品質は、ここ数年間でかなり品質がよくなってきています。それにつれて、サンプル動画の質も非常によくなってきています。 ...

PythonでTinder APIを使ってネトストとサイバーナンパ師やってみた

Python TinderのAPI Pynderを利用する こんにちは。突然ですが、ナンパしたい。僕は陰キャラなので、歌舞伎町でナンパに繰り出すことなんてできない。 そういえば前回、 PythonでTinderのAPIをいじる で書いた通り、PythonでTinderのAPIをいじれた。原理的には自分のアカウントのFacebook access ...


【Python】Slack Botの作り方まとめ - Webスクレイピング・定期実行の合わせ技 -

#背景 ちはっす。DAIです。 会社の同僚と自宅でよく作業会をやっています。音楽聞いて、料理食べて、あとはただコツコツとみんなでそれぞれが勉強するだけなのですが、とてもQOLが高いです。 #やりたいこと チケットを譲ってくれる人を見つけられるサイトがあるそうです。ここの最新情報を毎日自動でSlackで更新するようにします。

そもそもWeb APIとは


厳格な定義はないですが、広義にはHTTPプロトコルを用いてネットワーク越しに呼び出すアプリケーション間、システム間のインターフェースのことです。



簡単に言えば、あるアプリケーションから、外部サイトの情報を、受信・送信・更新・消去ができるような窓口になります。DMMのAPIを利用すれば、DMMのエロ動画を受信できるようになるわけですね。


外部サイトにスクレイピングしてデータを取得する方法もあるのですが、それだとサービス側に大きな負担をかけてしまいます。また、データの取り扱いもかなり面倒になります。


一方、Web APIは共通の方式で外部のデータを取得できるので、外部サイトの情報をうまく利用する方法として、適しています。Web APIがあるならスクレイピングしなくて済むことが多いです。

Web APIで使う通信の仕組み


現状のWeb APIは、ほとんどREST APIと呼ばれる仕様になっています。REST APIの仕様としては、以下のようになっています。

RESTは設計に際し以下を設計原則とするよう提言されています。
  • アドレス指定可能なURIで公開されていること
  • インターフェース(HTTPメソッドの利用)の統一がされていること
  • ステートレスであること
  • 処理結果がHTTPステータスコードで通知されること
これらの原則に則ったWebサービスをRESTfulなサービスといいます。

REST入門 基礎知識 - Qiita

RESTサービスを開発するにあたって勉強したことをまとめました。RESTとはなんぞやというところについて書いていきます。実際の開発方法等については当記事では触れません。 REST( REpresentational State T ransfer)はWebサービスの設計モデルです。RESTなWebサービスは、そのサービスのURIにHTTPメソッドでアクセスすることでデータの送受信を行います。


マッシュアップアプリを作るときに必要な知識


マッシュアップアプリを利用する場合に必要になる知識は、主に認証の知識と、HTTPの通信に関する知識となります。


認証:Basic認証とOAuth認証


Web APIの情報は、認証情報によって制限されることが多くあります。特にWeb APIで利用される方法として、Basic認証と、Oauth認証があります。
また、Oauth認証にも、Oauth1.0認証と、OAuth2.0の認証があります。


Web API提供元で、ほとんどがOAuth2.0の認証になっています。一部ツイッターだけいまだにOAuth1.0の認証形式をとっているので、マッシュアップアプリを作るときには注意が必要となります。


HTTPの通信:APIのエンドポイントとHTTP リクエスト


我々がWebサイトにアクセスするときに、実は4種類の行動しかしていません。ページの情報を取得するGETリクエスト・そしてこちらから情報を送信するPOSTリクエスト・こちらからデータを送り、データを更新するUPDATE(PATCH)リクエスト・最後に削除するDELETEリクエストです


Web APIで通信するときには、
  • 指定のURLのパラメーターを設定
  • そのURLで行う行動を、HTTPリクエストを選択(GET・POST・PATCH・DELETE)
  • 認証や送信する値をHTTP Bodyに入れる
という処理を行っています。

Web APIの通信の具体例:LINEにメッセージを送信する場合


LINE APIに、DMMのアダルト動画を送信するスクリプトを書いたときのスクリプトで紹介します。Google Apps Scriptで記述されています。

 UrlFetchApp.fetch(LINE_END_POINT, {
    'headers': {
      'Content-Type': 'application/json; charset=UTF-8',
      'Authorization': 'Bearer ' + LINE_ACCESS_TOKEN,
    },
    'method': 'post',
    'payload': JSON.stringify({
      'replyToken': reply_token,
      'messages': messages,
    }),
  });   
  


HTTP ヘッダーには、Authorizationという、認証キーを入れます。この場合はLINE APIが発行しているアクセストークンを入れています。

'Authorization': 'Bearer ' + LINE_ACCESS_TOKEN,

こちらから指定の動画URLを送信するので、リクエストはpostリクエストになります。

'method': 'post',

payloadには、送信するデータをいれています。

どんなデータを入れればいいかについては、基本的にAPIを提供しているプロバイダーの、SDKドキュメントを見ると、サンプルコードがのっていたりするので、それを見て確認してみるのがいいと思います。

注目の投稿

 PythonのTweepyを利用して、Twitter APIを利用している。 その中で、ハマったポイントをメモしておく。 まず、Searchに関して。 Twitter検索は、クライアントアプリ側では、全期間の検索が可能になっている。 一方で、APIを利用する際は、過去1週間しか...