PHPで浜崎あゆみの昔のアルバムを聞きまくろう

10個リクエストを送ります。
重複してレスポンスが返ってくるので、array_uniqueで重複を削除します。

<?php

require 'vendor/autoload.php';

$session = new SpotifyWebAPI\Session(
    'id',
    'secret',
    'http://192.168.33.10:8000/callback/'
);

$api = new SpotifyWebAPI\SpotifyWebAPI();

$count = 10;

if (isset($_GET&#91;'code'&#93;)) {
    $session->requestAccessToken($_GET['code']);
    $api->setAccessToken($session->getAccessToken());


    $tracks = $api->search('浜崎あゆみ', 'track', array(
        'limit' => $count
        ));
 
// print_r('<pre>');
// var_dump($tracks);
// print_r('</pre>');
    for($i=0; $i<$count; $i++){
        $track_id&#91;&#93; = $tracks->tracks->items[$i]->album->id;
    }


    // print_r($track_id);
} else {
    $options = [
        'scope' => [
            'user-read-email',
        ],
    ];

    header('Location: ' . $session->getAuthorizeUrl($options));
    die();
}

$track_id = array_unique($track_id);
foreach($track_id as $value){
    echo "<iframe src=\"https://embed.spotify.com/?uri=spotify:album:".$value."\" width=\"300\" height=\"380\" frameborder=\"0\" allowtransparency=\"true\"></iframe>";
}
?>

あ、これは結構いい。昔の曲が聞ける。

LUNA SEA行ってみよう。 mothersはかっこよかった。

一曲全部じゃないのが惜しいが。

PHPで浜崎あゆみを聞いてみよう

spotify api
$api->searchでtrackが返ってきます。

<?php
require 'vendor/autoload.php';
$session = new SpotifyWebAPI\Session(
    'id',
    'secret',
    'http://192.168.33.10:8000/callback/'
);

$api = new SpotifyWebAPI\SpotifyWebAPI();
if (isset($_GET&#91;'code'&#93;)) {
    $session->requestAccessToken($_GET['code']);
    $api->setAccessToken($session->getAccessToken());
    $tracks = $api->search('浜崎あゆみ', 'track', array(
        'limit' => 1
        ));
    $track_id = $tracks->tracks->items[0]->album->id;
    print_r($track_id);
} else {
    $options = [
        'scope' => [
            'user-read-email',
        ],
    ];
    header('Location: ' . $session->getAuthorizeUrl($options));
    die();
}
// print_r('<pre>');
// var_dump($tracks);
// print_r('</pre>');
?>
<h1>spotify</h1>
<iframe src="https://embed.spotify.com/?uri=spotify:album:<?php echo $track_id; ?>" width="300" height="380" frameborder="0" allowtransparency="true"></iframe>

まあまあいいんだけど、全部サビ前からサビの30秒位なんだよな。
1曲全部聞けないと、物足りない感が尋常ではない。

あ、iframeこんな感じです。うーん、違うな。やっぱりイントロから聞けないと絶対ダメでしょ。

spotify api invalid redirect uri

index.php

$session = new SpotifyWebAPI\Session(
    'client id',
    'client secret',
    'http://192.168.33.10:8000/callback'
);

spotify

invalid URIのレスポンスが返ってくるため、stackoverflowを見ていたら、

stackoverflow
https://stackoverflow.com/questions/32956443/invalid-redirect-uri-on-spotify-auth
app.js:
var redirect_uri = ‘http://localhost:8888/callback’;
Spotify > My application:
http://localhost:8888/callback/

それでもエラーで
なんでだろうと思っていたら、
myappとlocalで、callback urlは完全一致(バックスラッシュ)にしないといけないようです。
http://192.168.33.10:8000/callback/
http://192.168.33.10:8000/callback/

泣きたくなってきた。

yahooショッピングapi

久しぶりにValueCommerceにログインしました(笑)

<!DOCTYPE html>
<html lang='ja'>
<head>
<title>API</title>
<meta charset='utf-8'>
</head>
<body>
<?php

$yahoo_result = getYahooResult('ヴィトン');
foreach ($yahoo_result as $item) :
?>
<div style='margin-bottom: 20px; padding: 30px; border: 1px solid #000; overflow:hidden;'>
<div style='float: left;'><img src='<?php echo $item&#91;'img'&#93;; ?>'></div>
<div style='float: left; padding: 20px;'>
<div><?php echo $item&#91;'name'&#93;; ?></div>
<div><a href='<?php echo $item&#91;'url'&#93;; ?>' target="_blank"><?php echo $item&#91;'url'&#93;; ?></a></div>
<div><?php echo $item&#91;'price'&#93;; ?>円</div>
</div>
</div>
<?php
endforeach;
?>
</body>
</html>
<?php
function getYahooResult($keyword){

$baseurl = "http://shopping.yahooapis.jp/ShoppingWebService/V1/itemSearch";

$params = array();
$params&#91;"appid"&#93; = "***";
$params&#91;"query"&#93; = urlencode_rfc3986($keyword);
$params&#91;"sort"&#93; = urlencode_rfc3986("+price");
$params&#91;"affiliate_type"&#93; = "vc";
$params&#91;"affiliate_id"&#93; = urlencode_rfc3986("***");

$canonical_string = "";
foreach ($params as $k => $v){
	$canonical_string .= "&" . $k . "=" . $v;
}
$canonical_string = substr($canonical_string, 1);

$url = $baseurl . "?" . $canonical_string;

// echo $url . "<br>";

$yahoo_xml = simplexml_load_string(@file_get_contents($url));

// print_r('<pre>');
// var_dump($yahoo_xml);
// print_r('</pre>');

$items = array();
foreach($yahoo_xml->Result->Hit as $item){

	$items[] = array(
		'name' => (string)$item->Name,
		'url' => (string)$item->Url,
		'img' => (string)$item->Image->Medium,
		'price' => (string)$item->Price,
		);
}
var_dump($items);
return $items;
}

function urlencode_rfc3986($str){
	return str_replace("%7E", "~", rawurlencode($str));
}
?>

楽天市場apiでジャンル指定

色々できそうですね♪

<!DOCTYPE html>
<html lang='ja'>
<head>
<title>api</title>
<meta charset='utf-8'>
</head>
<body>
<?php
$rakuten_result = getRakutenResult('adidas', 1000);
foreach ($rakuten_result as $item):
?>
<div style='margin-bottom:20px; padding:30px; border:1px solid #000; overflow:hidden;'>
<div style='float: left;'><img src='<?php echo $item&#91;'img'&#93;; ?>'></div>
<div style='float: left; padding: 20px;'>
<div><?php echo $item&#91;'name'&#93;; ?></div>
<div><a href='<?php echo $item&#91;'url'&#93;; ?>' target_"blank"><?php echo $item&#91;'url'&#93;; ?></a></div>
<div><?php echo $item&#91;'price'&#93;; ?>円</div>
<div><?php echo $item&#91;'shop'&#93;; ?></div>
</div>
</div>
<?php
endforeach;
?>
</body>
</html>


<?php

function getRakutenResult($keyword, $min_price){


$baseurl = 'https://app.rakuten.co.jp/services/api/IchibaItem/Search/20170706';

function urlencode_rfc3986($str){
	return str_replace('%7E','~', rawurlencode($str));
}

$params = array();
$params&#91;'applicationId'&#93; = '***';
$params&#91;'keyword'&#93; = urlencode_rfc3986($keyword);
$params&#91;'sort'&#93; = urlencode_rfc3986('+itemPrice');
$params&#91;'minPrice'&#93; = $min_price;
$params&#91;'genreId'&#93; = '509057';



$canonical_string='';
foreach($params as $k => $v){
	$canonical_string .= '&' .$k. '=' .$v;
}

$canonical_string = substr($canonical_string, 1);

$url = $baseurl . '?' . $canonical_string;


$rakuten_json=json_decode(@file_get_contents($url, true));

print_r('<pre>');
var_dump($rakuten_json);
print_r('</pre>');

$items = array();
foreach($rakuten_json->Items as $item) {
    $items[] = array(
                    'name' => (string)$item->Item->itemName,
                    'url' => (string)$item->Item->itemUrl,
                    'img' => isset($item->Item->mediumImageUrls[0]->imageUrl) ? (string)$item->Item->mediumImageUrls[0]->imageUrl : '',
                    'price' => (string)$item->Item->itemPrice,
                    'shop' => (string)$item->Item->shopName,
                    );
}

return $items;
}
?>