API概要
クリックカウントの結果を取得
特定の配信タスクで、URLのクリックカウントを利用していた場合に、その結果を取得します。取得項目は次の通りです。
- URLごとに
- URLのID
- URL
- ユニーククリック数
- クリック1件ごとに(※リクエストパラメータのincludes_logが1の場合)
- URLのID
- クリックしたユーザーのメールアドレスは、アップロードされたリストの何行目か
- クリックした日時
リクエストURL
https://example.com/API/get_clicks
※正式なURLは御契約後にご連絡致します。
リクエストパラメータ
パラメータ名 | データタイプ | 必須 | 説明 |
---|---|---|---|
login_id | string | ○ | ログイン用ID |
password | string | ○ | ログイン用パスワード |
id | string | ○ | タスクID |
includes_log | string | ○ | クリック1件ごとのデータを含むか(含む = 1、デフォルト = 0) |
APIからのXMLについて
APIから送信されるXMLの書式は以下の通りとなります。
<?xml version="1.0" encoding="UTF-8"?> <response xmlns="urn:3hands:3mail"> <status>OK</status> //ステータス <code>211</code> //コード <message>success</message> //メッセージ <url> <id>1</id> //URLのID <url>http://example.com/</url> //URL <count>1234</count> //ユニーククリック数 <rate>34</rate> //開封率 </url> <url> <id>2</id> //URLのID <url>http://example.com/test.html</url> //URL <count>567</count> //ユニーククリック数 <rate>21</rate> //開封率 </url> <url> (URLの数だけ繰り返し) </url> //以下は includes_log が 1の場合のみ含まれます <click> <url_id>1</url> //URLのID <line>123</line> //アドレスの行番号 <created_at>2014-01-02 03:04:05</created_at> //クリックした日時 </click> <click> <url_id>2</url> //URLのID <line>345</line> //アドレスの行番号 <created_at>2014-03-04 05:06:07</created_at> //クリックした日時 </click> <click> (クリックの数だけ繰り返し) </click> </response>
※クリックが0件の場合でもstatusはOKとなります。
返り値の詳細
名前 | データタイプ | 最大バイト数 | 説明 |
---|---|---|---|
status | string | 2 | ステータス(OK=成功、NG=失敗) |
code | string | 3 | コード(一覧) |
message | string | 255 | メッセージ |
url.id | int | 11 | ID |
url.url | string | 1023 | URL |
url.count | int | 11 | ユニーククリック数 |
url.rate | int | 2 | クリック率(%) (=ユニーククリック数/有効送信数) |
click.url | string | 1023 | URL |
click.line | int | 11 | クリックしたユーザーのメールアドレスは、アップロードされたリストの何行目か |
click.created_at | string | 32 | クリック日時 |
サンプルスクリプト
<?php //APIへ送信するデータ $post_data = array( "login_id" => "login@example.com", //ログインID "password" => "password", //ログインパスワード "id" => "90" //タスクID ); //APIのHostを設定 $api_host = "example.com"; //APIのPathを設定 $api_path = "/API/get_clicks"; //APIへ接続 $sp = fsockopen('ssl://' . $api_host, 443, $errno, $errstr, 30); //エラーチェック if(!$sp){ print $errno . "<br>" . $errstr; exit; } //boundary生成 $boundary = "-----" . md5(uniqid()); //header生成 $header = "POST " . $api_path . " HTTP/1.0\r\n"; $header .= "Host: " . $api_host . "\r\n"; $header .= "Content-type: multipart/form-data, boundary=" . $boundary . "\r\n"; $header .= "Referer: http://" . $_SERVER['SERVER_NAME'] . $_SERVER['SCRIPT_NAME'] . "\r\n"; $header .= "Accept: */*\r\n"; //body生成 $body = ""; //テキストデータをAPIへ送信できるように変換 foreach ($post_data as $key => $val){ $body .= "--" . $boundary . "\r\n"; $body .= "Content-Disposition: form-data; name=\"" . $key . "\"\r\n"; $body .= "\r\n" . $val . "\r\n"; $body .= "--" . $boundary . "\r\n"; } //送信データ末尾の区切り文字を追加 $body .= "--" . $boundary . "--\r\n"; $body .= "\r\n\r\n"; //ヘッダーにbodyのサイズを追加 $header .= "Content-length: " . strlen($body) . "\r\n\r\n"; //データ送信 fputs($sp, $header); fputs($sp, $body); //データ受信 $buf = ""; $response = fgets($sp); if (substr_count($response, "200 OK") > 0){ while (!feof($sp)){ $buf = $buf . fread($sp, 4096); } }else{ print "データ受信に失敗しました"; exit; } //接続終了 fclose($sp); //結果XMLを取得 $result = substr($buf, strpos($buf, "\r\n\r\n")+4); //XMLをパースする $result_xml = simplexml_load_string($result); //結果を取得し表示 print "status:" . $result_xml->status . "<br>"; //ステータス print "code:" . $result_xml->code . "<br>"; //コード print "message:" . $result_xml->message . "<br>"; //メッセージ //URLごとの集計結果を表示 foreach ($result_xml->url as $url){ print "----------" . "<br>"; print "id:" . $click->id . "<br>"; //URLのID print "url:" . $click->url. "<br>"; //URL print "count:" . $click->count. "<br>"; //ユニーククリック数 print "rate:" . $click->rate. "<br>"; //クリック率 } //クリック毎の詳細を取得し表示 foreach ($result_xml->click as $click){ print "----------" . "<br>"; print "URL:" . $click->url . "<br>"; //URL print "line:" . $click->line. "<br>"; //アドレスの行番号 print "created_at:" . $click->created_at. "<br>"; //クリック日時 } exit; ?>
サンプルスクリプト解説
APIへ送信するデータ及び、APIのURLについて設定を行います。
//APIへ送信するデータ $post_data = array( "login_id" => "login@example.com", //ログインID "password" => "password", //ログインパスワード "id" => "90" //タスクID ); //APIのHostを設定 $api_host = "example.com"; //APIのPathを設定 $api_path = "/API/get_clicks";
APIへソケットを使って接続を行います。
//APIへ接続 $sp = fsockopen('ssl://' . $api_host, 443, $errno, $errstr, 30); //エラーチェック if(!$sp){ print $errno . "<br>" . $errstr; exit; }
APIへ送信するデータの作成を行います。
//boundary生成 $boundary = "-----" . md5(uniqid()); //header生成 $header = "POST " . $api_path . " HTTP/1.0\r\n"; $header .= "Host: " . $api_host . "\r\n"; $header .= "Content-type: multipart/form-data, boundary=" . $boundary . "\r\n"; $header .= "Referer: http://" . $_SERVER['SERVER_NAME'] . $_SERVER['SCRIPT_NAME'] . "\r\n"; $header .= "Accept: */*\r\n"; //body生成 $body = ""; //テキストデータをAPIへ送信できるように変換 foreach ($post_data as $key => $val){ $body .= "--" . $boundary . "\r\n"; $body .= "Content-Disposition: form-data; name=\"" . $key . "\"\r\n"; $body .= "\r\n" . $val . "\r\n"; $body .= "--" . $boundary . "\r\n"; } //送信データ末尾の区切り文字を追加 $body .= "--" . $boundary . "--\r\n"; $body .= "\r\n\r\n"; //ヘッダーにbodyのサイズを追加 $header .= "Content-length: " . strlen($body) . "\r\n\r\n";
APIへデータの送信を行います。
//データ送信
fputs($sp, $header);
fputs($sp, $body);
データの受信を行います。
へッダーが "200 OK" 以外の場合はエラーとなります。
//データ受信 $buf = ""; $response = fgets($sp); if (substr_count($response, "200 OK") > 0){ while (!feof($sp)){ $buf = $buf . fread($sp, 4096); } }else{ print "データ受信に失敗しました"; exit; } //接続終了 fclose($sp);
受信したデータからXML部分のみを取得後パースを行います。
//結果XMLを取得 $result = substr($buf, strpos($buf, "\r\n\r\n")+4); //XMLをパースする $result_xml = simplexml_load_string($result);
結果の基本項目は以下の方法で取得できます。
今回はサンプルなので取得結果をそのまま表示します。
//結果を取得し表示 print "status:" . $result_xml->status . "<br>"; //ステータス print "code:" . $result_xml->code . "<br>"; //コード print "message:" . $result_xml->message . "<br>"; //メッセージ
集計結果は以下の方法で取得できます。
詳細はステータスがOK(送信した内容に問題が無い)の場合のみ取得できます。
//URLごとの集計結果を表示 foreach ($result_xml->url as $url){ print "----------" . "<br>"; print "id:" . $click->id . "<br>"; //URLのID print "url:" . $click->url. "<br>"; //URL print "count:" . $click->count. "<br>"; //ユニーククリック数 print "rate:" . $click->rate. "<br>"; //クリック率 }
//エラーの詳細を取得し表示 foreach ($result_xml->click as $click){ print "----------" . "<br>"; print "URL:" . $click->url . "<br>"; //URL print "line:" . $click->line. "<br>"; //アドレスの行番号 print "created_at:" . $click->created_at. "<br>"; //クリック日時 }
サンプルスクリプトの実行結果は以下の通りとなります。
status:OK code:211 message:success ---------- id:1 url:http://example.com/ count:123 rate:21 ---------- id:2 url:http://example.com/test.html count:456 rate:33 ---------- URL:1 line:1111 created_at:2014-01-02 03:04:05 ---------- URL:2 line:1234 created_at:2014-05-06 07:08:09
スクリプト実行後の処理について
実際にはXMLを取得後、ステータス及びコードに合わせて処理を行ってください。(正常終了、エラー表示等)
注意事項
クリック履歴は配信から3ヶ月間のみ保存しています。それ以降は削除されますのでご注意ください。