Help us understand the problem. What is going on with this article?

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

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とかにしたらユーザー増えそうなのになぁ。

mei331
想像と創造を繰り返す黒いヒツジ。ヒツジとペンギンが好き。フルーツサンドを探しています。
https://arca-works.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした