あふぃふぃふぃふぃw 皆さん小銭を愛しておりますか? その小銭にすらならないアレ情報ですw
DMMのアフィリエイト合格しました~twitter*1のURLで~w
でさ、フロアって概念があるみたいなのよ。
サイトが一般(DMM.com)かアダルト(FANZA)か2種類あって、それぞれに複数のサービスがあり、サービスにまた複数のフロアが付いてる感じ。
実際に取ったのはこんな感じ
サクッと取れるじゃろ、と思っていたらハマった・・・。文字コードである。
いや、結果から言うと文字コードを意識する必要0だったんだけど、途中でうまく出ないときに取得したデータ見たら、ユニコードエスケープ列(\UXXXX)になってて、これが原因じゃね!? といろいろやってたらJSONはそもそもエスケープするのが仕様なのでそのままで良かったという・・・(´;ω;`)
ツイキャスで30分でできるだろう、と思って配信してたらハマったwwwwww
ソースコード
<?php
header("Content-type: text/html; charset=UTF-8");
mb_language("Japanese");
mb_internal_encoding("UTF-8");
?>
<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 = 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の売上ランキングでもツイートしたかったがそれはまた明日。とほほ。