Yahoo検索広告APIを使ってJavaでオフラインコンバージョンのアップロードをしてみる
会社のオフラインコンバージョンツールをYahoo検索広告に対応するのに調べたら、如何せんリファレンスが全く無かった。
オフラインコンバージョンのアップロードに成功したものを備忘録として書いておく。
Yahooの公式リファレンスはこちら。
/**
* Yahoo検索広告へのコンバージョンデータアップロード
* @param token アクセストークン
* @param accountId アカウントID
* @param csvFileName アップデートCSVファイル名
* @param csvFilePath アップデートCSVファイルパス
*/
private void uploadYahooConversionCSV(String token, String accountId, String csvFileName, String csvFilePath) {
// URL
String uploadURL = "https://ads-search.yahooapis.jp/api/v2/OfflineConversionService/upload"
+ "?accountId=" + accountId // 各種アカウントID。確認はこちらから⇒https://promotionalads.business.yahoo.co.jp/biz/ss/accounts/#/
+ "&uploadType=NEW" // 新規の場合NEW。調整の場合はADJUSTMENT。
+ "&uploadFileName=" + csvFileName;
HttpURLConnection connection = null;
try {
// アップロード先URL
URL url = new URL(uploadURL);
// コネクション取得
connection = (HttpURLConnection) url.openConnection();
// アップロードファイル
FileInputStream file = new FileInputStream(csvFilePath);
// バウンダリ
String boundary = UUID.randomUUID().toString();
// 送信Method設定(POST)
connection.setRequestMethod("POST");
// リクエストボディデータ書き込み許可
connection.setDoOutput(true);
// トークン設定
connection.setRequestProperty("Authorization", "Bearer " + token);
// acceptヘッダ
connection.setRequestProperty("accept", "application/json");
// multipart/form-data設定
connection.setRequestProperty("Content-Type"
, "multipart/form-data; boundary=" + boundary);
// コネクションを開く
connection.connect();
// リクエストボディの書き出し
OutputStream out = connection.getOutputStream();
out.write(("--" + boundary + "\\r\\n"
+ "Content-Disposition: form-data; name=\"file\"; filename=\"" + csvFileName + "\""
+ "\\r\\n"
+ "Content-Type: application/octet-stream"
+ "\\r\\n" + "\\r\\n")
.getBytes(StandardCharsets.UTF_8));
byte[] buffer = new byte[128];
int size = -1;
while (-1 != (size = file.read(buffer))) {
out.write(buffer, 0, size);
}
out.write(("\\r\\n" + "--" + boundary + "--" + "\\r\\n")
.getBytes(StandardCharsets.UTF_8));
out.flush();
file.close();
// レスポンスの読み出し
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
if (LOG.isInfoEnabled()) {
LOG.info("Sending 'POST' request to URL : " + url.toString());
LOG.info("Response Code : " + connection.getResponseCode());
LOG.info("Response Message : " + connection.getResponseMessage());
LOG.info("Respose JSON : " + response.toString());
}
} catch(IOException e) {
e.printStackTrace();
} finally {
connection.disconnect();
}
}
YahooAPIを使うには事前に登録しておく必要がある。
登録に関してはこちら。
認証やアクセストークンの取得等はこちら。