スナックelve 本店

バツイチ40代女の日記です

DMMのアフィリエイト審査合格したが・・・

あふぃふぃふぃふぃw 皆さん小銭を愛しておりますか? その小銭にすらならないアレ情報ですw
DMMのアフィリエイト合格しました~twitter*1のURLで~w

でさ、フロアって概念があるみたいなのよ。
サイトが一般(DMM.com)かアダルト(FANZA)か2種類あって、それぞれに複数のサービスがあり、サービスにまた複数のフロアが付いてる感じ。
実際に取ったのはこんな感じ

サクッと取れるじゃろ、と思っていたらハマった・・・。文字コードである。
いや、結果から言うと文字コードを意識する必要0だったんだけど、途中でうまく出ないときに取得したデータ見たら、ユニコードエスケープ列(\UXXXX)になってて、これが原因じゃね!? といろいろやってたらJSONはそもそもエスケープするのが仕様なのでそのままで良かったという・・・(´;ω;`)
ツイキャスで30分でできるだろう、と思って配信してたらハマったwwwwww

ソースコード

<?php

//UTF-8のおまじない
header("Content-type: text/html; charset=UTF-8");
mb_language("Japanese");
mb_internal_encoding("UTF-8");
?>
<!doctype html>
<html>
	<head>
		<html lang="ja">
		<meta charset="UTF-8">
	</head>
	<body>

<?php
// トークンを指定
$apiid = "xxxxxxxxxx";
$affiliateid = "xxxxx-990";

$url = "https://api.dmm.com/affiliate/v3/FloorList?api_id={$apiid}&affiliate_id={$affiliateid}";


// JSONデータを取得・エンコードしオブジェクトに変換
$json = file_get_contents($url);

$obj = json_decode($json);


$sites = $obj->result->site;
foreach($sites as $site){

	echo "<p>name: " . $site->name . "</p>";
	echo "<p>code: " . $site->code . "</p>";
	$services=$site->service;
	foreach( $services as $service ){
		echo "<p>service:name: " . $service->name . "</p>";;
		echo "<p>service:code: " . $service->code . "</p>";;
		$floors=$service->floor;
		foreach( $floors as $floor ){
			echo "<p>floor:id:   " . $floor->id . "</p>";;
			echo "<p>floor:name: " . $floor->name . "</p>";;
			echo "<p>floor:code: " . $floor->code . "</p>";;
		}
	}
}
?>
	</body>
</html>


ちなみにユニコードエスケープ列をアンエスケープしたいときは

<?php
$str = preg_replace_callback('/\\\\u([0-9a-fA-F]{4})/', function ($match) {
    return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');
}, $str);
?>

のstrに文字列突っ込めばいいみたい。
情報元
php — 「\ u00ed」などのUnicodeエスケープシーケンスを適切なUTF-8エンコード文字にデコードする方法は?

他にも

$string = 'あ\u3042い\u3044う\u3046え\u3048お\u304a';

function unicode_sequence_decode($string)
{
    return json_decode('"'.$string.'"');
}

PHP: json_decode を使って Unicode エスケープシーケンスを UTF-8 の文字列に変換する - Sarabande.jp

と、json_decodeにダブルコーテーション付けて渡す方法なども有った。
必要なかったのだけども・・・(´;ω;`)

DMMの売上ランキングでもツイートしたかったがそれはまた明日。とほほ。

*1:現在フォロワー4