LoginSignup
1

More than 3 years have passed since last update.

Bitly API v4で短縮URLを展開、クリック数を取得する方法

Last updated at Posted at 2020-05-18

bit.ly API v3が終了してしまったので、bit.ly API v4に移行しようと使い方を調べたものの情報があまりないので、メモがてら置いておきます。

bitlyのダッシュボードがとんでもなく見辛いので見やすくするために書きました。
(棒グラフにマウスオーバーしないと数字がわからないって本当にどうかと思う)

ここでは、短縮URLの展開(元のURLに戻す)と、短縮URLがクリックされた数を取得する方法を記載しています。
APIを使用して、短縮URLを取得する方法は、以下のサイトを参考にしてください。

短縮URL生成サイト「bit.ly」のAPIv4へのマイグレーションの方法

bit.ly API を使い始める前に

bit.ly APIを使用するには、アクセストークンが必要になります。
アカウントを取得→アクセストークンを取得しておいてください。

アクセストークンを取得する方法は、以下のサイトがわかりやすいと思います。
bitlyのAPIアクセストークンを取得できない?パスワード入力の場所が変わってた

bit.ly APIで短縮URLを展開する

index.php
function LinkExpand($url, $token){
    $baseurl = 'https://api-ssl.bitly.com/v4/expand';
    if(strpos($url,'https') !== false){
        $url = substr($url, 8);
    }else{
        $url = substr($url, 7);
    }
    $ch = curl_init($baseurl);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(['bitlink_id' => $url]));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        "Authorization: Bearer ". $token,
        "Content-Type: application/json",
        "Host: api-ssl.bitly.com",
        "Accept: application/json"
    ]);
    $results = json_decode(curl_exec($ch));
    $link = $results->long_url;
    echo $link;
}

$urlに短縮URL、$tokenにアクセストークンを入れて叩きます。

bitlink_idは、短縮URLからhttps://を削除したものみたいです。

bit.ly API でクリック数を取得する

index.php
function LinkAnalysis($url, $token){
    date_default_timezone_set("Asia/Tokyo");
    if(strpos($url,'https') !== false){
        $url = substr($url, 8);
    }else{
        $url = substr($url, 7);
    }
    $api = 'https://api-ssl.bitly.com/v4/bitlinks/'.$url.'/clicks';
    $ch = curl_init($api);
    curl_setopt($ch, CURLOPT_GETFIELDS, json_encode(['unit'=>'day','units'=>-1]));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        "Authorization: Bearer ".$token,
        "Content-Type: application/json"
    ]);

    $obj = json_decode(curl_exec($ch), true);
    if(!$obj){
        echo 'データを取得できませんでした';
    }else{
        $revData = array_reverse($obj['link_clicks']);
        $allNum = 0;
        echo '<table><tr>';
        foreach ($revData as $result){
            $getDate = $result['date'];
            $getDate = date('m/d', strtotime($getDate));
            echo '<th>'.$getDate.'</th>';
        }
        echo '</tr><tr>';
        foreach ($revData as $result){
            $getClick = $result['clicks'];
            echo '<td>'.$getClick.'</td>';
            $allNum += $getClick;
        }
        echo '</tr></table>';
        echo '<p>合計:'.$allNum.'</p>';
    }
}

$urlに短縮URL、$tokenにアクセストークンを入れて叩きます。

↓みたいな表組みで表示されるようにしてます。
スクリーンショット 2020-05-18 12.19.28.png

'unit'=>'day'で取得データの形式を指定できます。
day(日別)の他、"minute""hour""day""week""month"が指定できます。

'units'=>-1で取得数を指定できます。-1で全てのデータを取得します。
30日分しか取得できないので、'unit'=>'day'の場合は-1でいいと思います。

途中でarray_reverseしてますが、そのままだと配列の順番が「現在→過去」になっているので、「過去→現在」に直しているだけです。

そのほかの指定はAPIドキュメントをみてください。
Bitly API V4 - Get Clicks for a Bitlink

bit.ly API v3 との違い

実は、v3ではフリーアカウントでも古いURLの30日以上前のカウント数が取れたのですが、v4が稼働してからは取れなくなりました。
API叩けば有料と同等の数が取れちゃうのどうなのかなって思ってたので、予想はしてましたけど。

Pricingを見る限り、CUSTOMIZEDじゃないとあんまり旨味はないですね。
FreeもBasicも、Link Reporting が30dayになっています。なので、APIで取得できる日数も30dayまでに制限がされています。

Basicで60dayとかにしたらユーザー増えそうなのになぁ。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1