str_replace на URL Last.fm

Я пишу сценарий Last.FM, который показывает, какую песню вы слушаете, и я хотел бы иметь возможность связать исполнителя с названием песни и все такое.

Как мне это сделать? Я имею в виду, я предполагаю, что буду использовать str_replace(), но как?

Вот как Last.FM форматирует свои URL-адреса:

http://last.fm/artist/This+Is+A+Band

Итак, в основном я спрашиваю, как мне взять мою переменную $artist и преобразовать эти пробелы в плюсы, но только для той части скрипта, которая печатает информацию о песне.

Вот мой код:

$uname = "USERNAME";
$key = "API KEY";
$json = file_get_contents("http://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks=" . $uname . "&api_key=" . $key . "&format=json"); // Gets your data
if (strpos($json, 'nowplaying') !== false) {
list($currentsonginfo, $crap) = explode('{"nowplaying":"true"}}', $json);
list($crap, $v2) = explode('{"recenttracks":{"track":[{"artist":{"#text":"', $currentsonginfo);
list($artist, $restinfo) = explode('","', $v2);
list($crap, $currenttrack) = explode('"name":"', $restinfo); }
$playing = $artist . ' - ' . $currentrack; // Checks if a song is playing
if ($playing == ' - ') {
    echo '<a href="http://last.fm/user/' . $uname . '/">';
    echo "I'm not listening to anything."; // Only if you're not scrobbling
    echo "</a>";
} else {
    echo '<marquee>';
    echo '<a href="http://last.fm/user/' . $uname . '/">';
    echo "I'm currently listening to " . $currenttrack . " by " . $artist; // It shows when you're playing music!
    echo "</a>";
    echo '</marquee>';
}

person Cody    schedule 09.08.2014    source источник


Ответы (2)


В URL никогда не должно быть пробелов, поэтому вы всегда можете преобразовать все пробелы в +. Следовательно, вы можете просто использовать str_replace(" ", "+", $artist).

Кроме того, вы можете разобрать json, используя json_decode вместо того, чтобы взрывать строку.

person marrock    schedule 09.08.2014
comment
Ох, ну ладно. Круто, спасибо. Есть ли шанс, что вы могли бы сказать мне, где в мире я должен поставить str_replace()? Я никогда не использовал его раньше, поэтому я не знаю, как он работает с URL-адресами. - person Cody; 09.08.2014
comment
Замените $artist на str_replace( , +, $artist): echo Я сейчас слушаю . $ текущий трек . к . str_replace( , +, $artist); // Это показывает, когда вы играете музыку! - person marrock; 09.08.2014
comment
Ваш первый параметр - это поиск, а второй - замена, поэтому этот ответ задом наперед, он должен быть str_replace("+"," ",$artist); - person Brian Vanderbusch; 09.08.2014
comment
Хорошо, отлично! Большое спасибо, @marrock! - person Cody; 09.08.2014
comment
На самом деле, Брайан, ты ошибался. Так сказал Маррок. - person Cody; 09.08.2014
comment
да... Я думал, ты меняешь наоборот (плюсы на пробелы. Извини за это. - person Brian Vanderbusch; 10.08.2014
comment
О, да, нет проблем @BrianVanderbusch. - person Cody; 11.08.2014
comment
Кроме того, кто бы ни проголосовал за ответ @marrock, зачем? Его ответ был именно тем, что мне было нужно. - person Cody; 11.08.2014

PHP parse_url()

Для этого будет очень полезна функция parse_url в php.

<?php
$url = 'http://last.fm/artist/This+Is+A+Band';

print_r(parse_url($url));

echo parse_url($url, PHP_URL_PATH); // will print an array of the different parts of the url you can access with flags

Оттуда это просто вопрос удаления того, что вам не нужно, путем взрыва компонентов возвращаемого пути, получения последнего элемента в вашем развернутом массиве и использования str_replace с параметрами в порядке search, replace, haystack

<?php
$url = 'http://last.fm/artist/This+Is+A+Band';

$apiPath = parse_url($url, PHP_URL_PATH));

$parts = explode($apiPath, '/'); // get an array of the path components so you can access the artist

$artist = end($parts);  // moves array pointer to last structure

$artist = str_replace(' ','+',$artist); // turn your + into spaces
person Brian Vanderbusch    schedule 09.08.2014