読者です 読者をやめる 読者になる 読者になる

とあるプログラマの備忘録

都内某所に住むプログラマが自分用に備忘録を残すという趣旨のブログです。はてなダイアリーから移動しました!

【PHP】Googleの短縮URLAPIを使ってツイートとかのURLを短縮させる

こんなブログ?備忘録?よくわからない物を初めてもう3年以上立ちますが、
なんと20万アクセスという事でありがとうございます!(半分以上ロボットのような気もするんですけど…)
同じような苦しみを味わっている人の些細な助けになれば幸いですが、間違ってたりしたらすいませんw

さて、今日は別にはまらなかったんだけど、使い勝手の良さそうな物を使ったので備忘録。

Twitterなんかにブログの内容をツイートするには自分のアカウントからボタンを生成して置くだけ。
(基本はてなとかその他有名な所ではデフォルトでついてるけどね。)
なんですが、例えばこんなURL

http://hogehoge.com/myblog/daiary/12000001/1/タイトル

ありがちなルーティング様のURLかと思いますが、これに誘導したいんだけどちょっと長過ぎ!
しかもツイートするときにマルチバイトが入ると無視されちゃったりするし。
ってな感じだと非常に面倒なのでこれを

http://goo.gl/Okgs5

こんな感じで短縮すれば良いじゃないというお話です。
URL短縮ロジックは公開されていますが、自前で書くのもだるいのでもっと簡単な方法をということで
Google先生が公開している短縮URLAPI「URL Shortener API」を使います。

とりあえず、Googleaアカウントを作ってここにアクセス
そしたら「URL Shortener API」をONにしましょう。

ONになった事を確認したら。左のメニューの「API Access」を押してAPI keyをコピーしておきます。
(※このキーを下のボタンなんかを押して更新したりすると繋がらなくなるので注意です)

URLを生成している箇所に以下のメソッドを追加します
参考にさせて頂きましたm(__)m
Googleの短縮URLサービスAPI goo.gl をPHPから使用する

<?php
    /** 
     * 短縮URL
     */
    public function getTinyUrl($long_url='')                                                                                            
    {
        $api_url = 'https://www.googleapis.com/urlshortener/v1/url';
        $api_key = 'ここにさっきコピーしたAPI KEYを入れる';
        $curl = curl_init("$api_url?key=$api_key");
        curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
        curl_setopt($curl, CURLOPT_POST, 1); 
        curl_setopt($curl, CURLOPT_POSTFIELDS, '{"longUrl":"' . $long_url . '"}');
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
        $res = curl_exec($curl);
        curl_close($curl);
        $json = json_decode($res);
        return  $json->id;
    } 

これでおそらく短縮URLが帰ってくる筈。うん筈ですから!
ででで、これを今度Twitterのツイートボタンにしたい訳です。
という事でこんなんはいかがでしょうか?

<?php
    /** 
     * ツイートURL作成
     */
    public function makeTweetTag()                                                                                            
    {
        //さっきの短縮URLを作る
        $long_url = '長いURLは適当につくってね';
        $tiny_url = $this->getTinyUrl($long_url);
        $message = sprintf("○○のブログ!是非遊びに来てね!");

        $tag = sprintf('<a href="https://twitter.com/share" class="twitter-share-button" data-url="%s" data-text="%s" data-via="[ツイッターID]" data-lang="ja">ツイート</a>', $tiny_url, $message);
        $script = '<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>';

        return $tag.$script;
    } 

こんな感じで日記毎にmakeTweetTagを呼び出してあげれば完璧ですね!

※駄文?
ちなみにGoogle短縮URLは無料ですが、100万アクセスの制限があります。
ってことは毎回API通信してるとこれに引っかかる可能性があるので、一回短縮したURLはキャッシュ領域に保存するか
DBに保存しておいてごにょごにょした方がいいでしょう。

私はMemcacheに保存しました。(いざって時もflush_allするだけで良いしね♪)