サンプル・プログラムの実行例
使い方は、URL欄にURLを入力し、[短縮]ボタンを押下するだけというシンプルなものだ。
サンプル・プログラム
bit.ly 利用準備
bit.ly によるURL短縮
入力パラメータ(IN)をPOST(JSON形式)で渡し、出力結果(OUT)はJSONで戻るというAPIである。今回はXMLで戻るようにする。
URL |
---|
https://api-ssl.bitly.com/v4/shorten |
フィールド名 | 要否 | 内 容 |
---|---|---|
long_url | 必須 | 短縮したいURL |
domain | ドメイン | bit.ly固定 |
解説:準備
13: // 初期化処理 ================================================================
14: define('INTERNAL_ENCODING', 'UTF-8');
15: mb_internal_encoding(INTERNAL_ENCODING);
16: mb_regex_encoding(INTERNAL_ENCODING);
17: define('MYSELF', basename($_SERVER['SCRIPT_NAME']));
18: define('REFERENCE', 'https://www.pahoo.org/e-soul/webtech/php06/php06-26-01.shtm');
19:
20: //プログラム・タイトル
21: define('TITLE', 'bit.lyを使ってURLを短縮する');
22:
23: //リファラチェック+リリースフラグの設定
24: if (isset($_SERVER['HTTP_HOST']) && ($_SERVER['HTTP_HOST'] == 'localhost')) {
25: define('FLAG_RELEASE', FALSE);
26: define('REFER_ON', '');
27: ini_set('display_errors', 1);
28: ini_set('error_reporting', E_ALL);
29: } else {
30: //リリース・フラグ(公開時にはTRUEにすること)
31: define('FLAG_RELEASE', TRUE);
32: //リファラ・チェック(直リン防止用;空文字ならチェックしない)
33: define('REFER_ON', 'www.pahoo.org');
34: }
35:
36: //表示幅(ピクセル)
37: define('WIDTH', 550);
38:
39: //bit.lyアクセストークン
40: // https://www.pahoo.org/e-soul/webtech/php06/php06-01-02.shtm#bitly 参照
41: define('BITLY_TOKEN', '*************************************');
42:
43: //URL短縮API【変更不可】
44: define('BITLYv4_SHORTEN', 'https://api-ssl.bitly.com/v4/shorten');
【変更不可】以外の部分は適宜変更することができる。
解説:bit.ly API 呼び出し
172: /**
173: * bit.ly API 呼び出し
174: * @param string $url リクエストURL
175: * @param array $header HTTP HEADER変数を格納した連想配列("変数名"=>"値")
176: * @param array $post POST変数を格納した連想配列("変数名"=>"値")
177: * @return string 取得したコンテンツ/FALSE 取得エラー
178: */
179: function callBitlyAPI($url, $header, $post) {
180: //cURL送信
181: $curl = curl_init();
182: curl_setopt($curl, CURLOPT_URL , $url);
183: curl_setopt($curl, CURLOPT_HEADER, 1) ;
184: curl_setopt($curl, CURLOPT_POST, TRUE);
185: curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); //結果を文字列で
186: curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($post));
187: curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
188: curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
189: curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
190: curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
191: curl_setopt($curl, CURLOPT_TIMEOUT, 5);
192: $res1 = @curl_exec($curl);
193: $res2 = @curl_getinfo($curl);
194: curl_close($curl);
195:
196: //結果処理
197: if ($res1 != FALSE) {
198: $json = substr($res1, $res2['header_size']);
199: } else {
200: $json = FALSE;
201: }
202:
203: return $json;
204: }
入力パラメータはJSON形式に変換してからPOST渡しする必要がある。配列引数を使って渡す。
また、HTTP HEADER として、アクセストークン と Content-Typeを指定してやる必要がある。こちらも配列引数で指定するようにした。
解説:URLを短縮する
206: /**
207: * URLを短縮する
208: * @param string $url 短縮したいURL
209: * @param string $token アクセストークン
210: * @param string $errmsg エラーメッセージ格納用
211: * @return string 短縮URL
212: */
213: function bitlyShortenURL($url, $token, &$errmsg) {
214: $api = BITLYv4_SHORTEN;
215: $post = array(
216: 'long_url' => $url,
217: 'domain' => 'bit.ly'
218: );
219: $header = array(
220: 'Authorization: Bearer ' . $token,
221: 'Content-Type: application/json'
222: );
223:
224: //URL短縮
225: $json = @callBitlyAPI(BITLYv4_SHORTEN, $header, $post);
226: $items = json_decode($json);
227: //エラーチェック
228: if ($items == FALSE) {
229: $errmsg = 'bit.ly APIを利用できません';
230: return FALSE;
231: } else if (isset($items->link)) {
232: $res = (string)$items->link;
233: } else {
234: $errmsg = 'bit.ly API -- GUIDを取得できません';
235: return FALSE;
236: }
237:
238: return $res;
239: }
ユーザー関数 callBitlyAPI の戻り値を json_decode で展開し、エラーチェックしたのち、短縮URLを戻す。
参考サイト
- 各種WebAPIの登録方法 - bit.ly:ぱふぅ家のホームページ
- PHPで短縮URLを元に戻す:ぱふぅ家のホームページ
- bit.ly
- bit.ly API
そこで今回は、PHPでbit.lyを利用し、入力したURLを短縮するプログラムを作ってみることにする。
(2021年4月29日)bit.ly API v4対応, PHP8対応