【ツールの概要】
・世の中に数多あるWebのAPI等にHTTPリクエストを投げることが可能です。
・ここではLinuxではよく使う(?)Curlを、Windows環境上のPHPで実行してデータを取得します。
・PHPはJSON形式のファイルも簡単に扱えるため、APIを利用した自動化も思いのほか簡単にできます。
【例えばこんな無料APIが】
郵便番号検索API - zipcloud
例:http://zipcloud.ibsnet.co.jp/api/search?zipcode=1600022
都道府県API | 駅データ 無料ダウンロード 『駅データ.jp』
例:http://www.ekidata.jp/api/p/13.json
例:http://www.ekidata.jp/api/l/11301.json
(上記では東京「13」で路線一覧を出して、JR東海道本線(東京~熱海)「11301」で路線の駅名一覧を取得できる。)
他にもGoogleの各種サービス、Yahoo、NHK、路線検索、地図、Twitter、、諸々たくさんサービスがあります。
上記二つは登録不要なので今回サンプルに使います。(他は大体APIキーだったりOAuthだったりの認証がある)
【環境(使っている環境)】
Windows 10 Pro (Serverでも動くはず)
PHP 5.6以降
【PHPの設定】
php.iniの以下を変更する。
・「;extension=php_curl.dll」→「extension=php_curl.dll」 コメントアウトをなくしてCurlを有効にする。
比較的新しめのPHPならWindowsでも大抵これだけで行けると思います。
コマンドプロンプトで「php -v」と打って、エラーが出なければとりあえずOK。バージョン違う系のエラーが出たらそれを修正。
【PHP(実行用PHPファイル(APIkicker.php))】
<?php require_once(dirname(__FILE__).'./Class_common.php'); // 郵便番号1600022の情報を取得するAPIを叩くURL。参考→http://zipcloud.ibsnet.co.jp/doc/api $URLString = "http://zipcloud.ibsnet.co.jp/api/search?zipcode=1600022"; // クラスインスタンスの作成。コンストラクト時にURLをインスタンスに格納。 $APIInstance = new GetData($URLString); $APIResult = $APIInstance->CurlToZipCode(); // ここからAPIで取得したHTTPリクエストの解析をする。 // Class_Commonで連想配列に格納した値の取得。オブジェクトの要素(address2)へのアクセス時の書き方にも注意。 $code = json_encode($APIResult["code"]); //echoしたいから文字列にしたい →json_encodeで簡単に $objBody = json_decode($APIResult["body"]); //JSON文字列をオブジェクトにしたい →json_decodeで簡単に $address2 = $objBody->results[0]->address2; // 出力 echo "\r\n"; echo 'レスポンスコードは '.$code."\r\n"; echo 'address2のなかみは '.$address2."\r\n"."\r\n"; echo "=======var_dump======"."\r\n"; var_dump($objBody); echo "=======var_dump======"."\r\n";
【PHP(curlを実行しAPIからデータを取得するクラスを記載したPHP(Class_common.php))】
<?php class GetData { // インスタンス変数(url) private $url; public function __construct($str) { // インスタンス化時にインスタンス変数に文字列(URL)を格納。 $this->url = $str; } public function CurlToZipCode(){ // php_curlを利用 参考→https://www.php.net/manual/ja/book.curl.php // ここも。https://qiita.com/re-24/items/bfdd533e5dacecd21a7a $ch = curl_init(); // オプション追加の中でAPIのURLを設定。ここでは単純に設定。配列でも可能。→setopt_array curl_setopt($ch, CURLOPT_URL, $this->url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, true); $response = curl_exec($ch); // レスポンスのなかでレスポンスコードと、ヘッダの範囲を調べることによりbodyを得る。 $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE); $body = substr($response, $header_size); curl_close($ch); // 返り値は連想配列一つにして戻す。 $return_arr = array('code' => $code); $return_arr = array_merge($return_arr, array('body' => $body)); return $return_arr; } }
【使用方法】
・それぞれソースをコピペして拡張子を「.php」にして、一緒に「D:\phptest\」とかに保存します。
・phpをコマンドプロンプトで実行します。 →例:「php D:\phptest\APIKicker.php」
【説明】
APIKicker.phpを実行するとClass_common.phpのクラスGetDataのインスタンスを作成し、
CurlToZipCodeメソッドでcurlを実行します。
後は大体コード中のコメントのとおりです。
<実行イメージ>
【総評】
クラスの簡単な利用もしてみました。
記述量が少ないとあまりうまみもないですが、慣れるためにはいいのかも?
APIも登録必要とかもありますが、非常に有用なものもあり、プログラミングの楽しさが広がること間違いなしです。
自分は楽しいかって・・・いわれると・・・
【参考サイト】
php configuration error – Call to undefined function curl_init() | Expert BOX
https://www.php.net/manual/ja/book.curl.php
【PHP】クラスの基本 | インスタンス | プロパティとメソッド | オブジェクト指向 - Qiita
PHPの「クラス」と「インスタンス」――「オブジェクト指向」の基礎中の基礎 (1/3):Web業界で働くためのPHP入門(13) - @IT
https://www.php.net/manual/ja/ref.json.php