Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@mei331

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

More than 1 year has passed since last update.

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

1
Help us understand the problem. What is going on with this article?
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
mei331
想像と創造を繰り返す黒いヒツジ。ヒツジとペンギンが好き。フルーツサンドを探しています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?