#やりたいこと
アフィリエイトのバリューコマースの成果を確認するには、WEB画面にログインしてレポート画面を参照するのが一般的。
出来上がって安定したサイトでは週一などで発生数に変化があるか見るだけで良いが作り始めのサイトだとどのページで成果が発生しているかやチームのモチベーション上げるために1時間に一回くらいで成果を取得したい。A8で蜂🐝が飛ぶような奴ですね。
この記事ではバリューコマースのAPIを使って成果レポートを取得する所までを実装します。
#APIのリファレンス
「広告主向けAPI」「アフィリエイトサイト向けAPI」の2種類がある。
https://www.valuecommerce.ne.jp/feature/webservice.html
アフィリエイトサイト向けにはレポートAPIとウェブサービスAPIが用意されている。今回はレポートAPIの「トークン取得API」と「注文レポートAPIリファレンス」を使用する。
#API認証キーの取得
管理画面から発行する。詳細は割愛。
#トークン取得API
このAPIで取得できるトークンの有効期限は30分。期限切れの場合「invalid_token」が返ってくるので再取得が必要。取得制限は30分間以内に9000回以上の場合30分間ロック。普通の使い方ではひっかからないでしょう。
エラー表示とかは各自やっていただくとしてRubyでトークンを取得するコード。
ハマったのはマニュアルにはリクエストヘッダで「Authorization: Bearer [署名]」を指定する、とあるのだがRubyでは"Authorization" => "Bearer 署名文字列"と指定する必要がある所。失敗すると401になる。
# バリューコマースのAPIからトークンを取得する
# manual https://www.valuecommerce.ne.jp/feature/webservice.html
require 'open-uri'
require 'base64'
require 'json'
CLIENT_KEY = "hoge"
CLIENT_SECRET = "huga"
token = nil
bearer = Base64.strict_encode64("#{CLIENT_KEY}|#{CLIENT_SECRET}")
res = open("https://api.valuecommerce.com/auth/v1/affiliate/token/?grant_type=client_credentials","Authorization" => "Bearer #{bearer}")
if res.status[0] == "200"
res = JSON.parse(res.read)
else
puts "#{res.status[0]}, #{res.status[1]}"
end
token = res["resultSet"]["rowData"]["bearer_token"]
puts token
#レポート取得API
注文レポートAPIの取得制限は30分間以内に900回以上リクエストで30分間ロック。
# バリューコマースのAPIからレポートを取得する
# manual https://www.valuecommerce.ne.jp/feature/webservice.html
require 'open-uri'
require 'base64'
require 'json'
require "date"
CLIENT_KEY = "hoge"
CLIENT_SECRET = "fuga"
bearer = Base64.strict_encode64("#{CLIENT_KEY}|#{CLIENT_SECRET}")
def get_token(bearer)
res = open("https://api.valuecommerce.com/auth/v1/affiliate/token/?grant_type=client_credentials","Authorization" => "Bearer #{bearer}")
if res.status[0] == "200"
res = JSON.parse(res.read)
else
puts "#{res.status[0]}, #{res.status[1]}"
end
return res["resultSet"]["rowData"]["bearer_token"]
end
token = get_token(bearer)
#puts token
def get_report(token)
res = open("https://api.valuecommerce.com/report/v2/affiliate/transaction/?criteria=o&from_date=#{(Date.today-1).strftime("%Y-%m-%d")}","Authorization" => "Bearer #{token}")
if res.status[0] == "200"
res = JSON.parse(res.read)
else
puts "#{res.status[0]}, #{res.status[1]}"
end
return res
end
report = get_report(token)
puts report
このコードで以下のようなレスポンスが取得できるので後はよろしくやる。
#データは加工してあります。
{"resultSet"=>{"responseInfo"=>{"numberOfResult"=>1,
"nextOffset"=>-1,
"responseTime"=>"2018-10-19 12:56:38"},
"requestInfo"=>{"query"=>"criteria=o&from_date=2018-10-18",
"requestTime"=>"2018-10-19 12:56:37"},
"rowData"=>[{"clickDate"=>"2018-10-17 07:40:16",
"orderDate"=>"2018-10-18 07:09:57",
"approvalDate"=>nil,
"transactionOid"=>1111111111,
"merchantName"=>"広告主",
"merchantOid"=>22222222,
"programName"=>"広告プログラム名",
"programOid"=>3333333,
"vcptn"=>nil,
"itemQuantity"=>1,
"itemPriceTotal"=>10000000,
"affilPaymentNet"=>100000,
"affilPaymentTax"=>111,
"affilPayment"=>3333,
"approvalStatus"=>"P",
"approvalDeadline"=>58,
"referrer"=>"https://hogehuga/",
"device"=>"PC",
"updDate"=>"2018-10-18 07:22:07"}]}}