[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Last fm api
rasul96
<?php
$params = array(
'method' => 'artist.getInfo', // API функция
'api_key' => 'b25b959554ed76058ac220b7b2e0a026', // ваш API key
'lang' => 'ru',
);

$search = 'eminem';
$request = file_get_contents('http://ws.audioscrobbler.com/2.0/?artist=' . $search . '&' . http_build_query($params, '', '&'));

$xml = new SimpleXMLElement($request);
$charts = '';

foreach ($xml->artist as $artist)
{

$charts .= '<div id="cvb"><img class="sk" src="' . $artist->image[2] . '" align="left" height="95" width="115"><br><br>';
$charts .= '<div>' . $artist->bio->summary . '</div></div>';
}
echo '<br>' . $charts . '<br>';
?>



Это код взаимодействущий с lastfm api но есть проблема когда в базе lastfm нет необходимого исполнителя скрипт выводит ошибку Warning: file_get_contents(http://ws.audioscrobbler.com/....... Мне нужно добавить проверку например если такого исполнителя нет выводить надпись что нет исполнителя. Заранее благодарен за ответы

 ! 

М
Выделяйте код тегами!
Winston




Спустя 17 минут, 18 секунд (21.02.2012 - 14:53) killer8080 написал(а):
$params = array('method' => 'artist.getInfo', // API функция
'api_key' => 'b25b959554ed76058ac220b7b2e0a026', // ваш API key
'lang' => 'ru', );
$search = 'eminem';
$request = @file_get_contents('http://ws.audioscrobbler.com/2.0/?artist=' . $search . '&' . http_build_query($params, '', '&'));
if ($request) {
$xml = new SimpleXMLElement($request);
$charts = '';

foreach ($xml->artist as $artist) {

$charts .= '<div id="cvb"><img class="sk" src="' . $artist->image[2] .
'" align="left" height="95" width="115"><br><br>';
$charts .= '<div>' . $artist->bio->summary . '</div></div>';
}
echo '<br>' . $charts . '<br>';
}
else
echo 'Ошибка';

Спустя 7 минут, 51 секунда (21.02.2012 - 15:01) rasul96 написал(а):
Да спасибо работает но возникает новая проблема если яввожу 2 слова то выдает ошибку

Спустя 2 минуты, 37 секунд (21.02.2012 - 15:04) rasul96 написал(а):
Цитата (killer8080 @ 21.02.2012 - 11:53)
$params = array('method' => 'artist.getInfo', // API функция
'api_key' => 'b25b959554ed76058ac220b7b2e0a026', // ваш API key
'lang' => 'ru', );
$search = 'eminem';
$request = @file_get_contents('http://ws.audioscrobbler.com/2.0/?artist=' . $search . '&' . http_build_query($params, '', '&'));
if ($request) {
$xml = new SimpleXMLElement($request);
$charts = '';

foreach ($xml->artist as $artist) {

$charts .= '<div id="cvb"><img class="sk" src="' . $artist->image[2] .
'" align="left" height="95" width="115"><br><br>';
$charts .= '<div>' . $artist->bio->summary . '</div></div>';
}
echo '<br>' . $charts . '<br>';
}
else
echo 'Ошибка';

Как устранить ошибку с 2 словами я знаю что это из за того что пробелы в адресе должны писаться знаком %20 а как это сделать чтобы пробелы прописывались этим знаком

Спустя 2 минуты, 52 секунды (21.02.2012 - 15:07) walerus написал(а):
urlencode();

Спустя 57 секунд (21.02.2012 - 15:08) rasul96 написал(а):
Цитата (walerus @ 21.02.2012 - 12:07)
urlencode();

тоесть это надо поставить где то в скрипте

Спустя 2 минуты, 33 секунды (21.02.2012 - 15:10) ADiel написал(а):
Lastfm при ошибке выдает параметр ERROR с сообщением об ошибке. В API же все описано.

Спустя 39 секунд (21.02.2012 - 15:11) killer8080 написал(а):
$request = @file_get_contents('http://ws.audioscrobbler.com/2.0/?artist=' . urlencode($search) . '&' . http_build_query($params, '', '&'));

Спустя 1 минута (21.02.2012 - 15:12) ADiel написал(а):
Преобразование XML в массив. Делал как раз для Lastfm. Точнее нашел где то говнокласс и немного его почистил и упростил.

Спустя 58 секунд (21.02.2012 - 15:13) killer8080 написал(а):
Цитата (ADiel @ 21.02.2012 - 14:10)
Lastfm при ошибке выдает параметр ERROR с сообщением об ошибке. В API же все описано.

Но кроме этого кидает 400 http статус и file_get_contents кидает ворнинг и возвращает false

Можно конечно, заюзать контекст, но смысла особо не вижу, разве что от собаки избавится.

Спустя 14 минут, 30 секунд (21.02.2012 - 15:27) Winston написал(а):
Свернутый текст
ADiel какой-то ты широкий стал smile.gif

Спустя 2 минуты, 3 секунды (21.02.2012 - 15:29) killer8080 написал(а):
Вариант без глушения ошибок
$context = stream_context_create(array('http' => array('ignore_errors' => true)));
$params = array('method' => 'artist.getInfo', // API функция
'api_key' => 'b25b959554ed76058ac220b7b2e0a026', // ваш API key
'lang' => 'ru', );
$search = 'eminem';
$request = file_get_contents('http://ws.audioscrobbler.com/2.0/?artist='.urlencode($search).'&'.http_build_query($params, '', '&'), false, $context);

$xml = new SimpleXMLElement($request);
if (empty($xml->error)) {

$charts = '';

foreach ($xml->artist as $artist) {

$charts .= '<div id="cvb"><img class="sk" src="' . $artist->image[2] .
'" align="left" height="95" width="115"><br><br>';
$charts .= '<div>' . $artist->bio->summary . '</div></div>';
}
echo '<br>' . $charts . '<br>';
} else
echo 'Ошибка';

Спустя 3 минуты, 39 секунд (21.02.2012 - 15:33) rasul96 написал(а):
Цитата (killer8080 @ 21.02.2012 - 12:29)
Вариант без глушения ошибок
$context = stream_context_create(array('http' => array('ignore_errors' => true)));
$params = array('method' => 'artist.getInfo', // API функция
'api_key' => 'b25b959554ed76058ac220b7b2e0a026', // ваш API key
'lang' => 'ru', );
$search = 'eminem';
$request = file_get_contents('http://ws.audioscrobbler.com/2.0/?artist='.urlencode($search).'&'.http_build_query($params, '', '&'), false, $context);

$xml = new SimpleXMLElement($request);
if (empty($xml->error)) {

$charts = '';

foreach ($xml->artist as $artist) {

$charts .= '<div id="cvb"><img class="sk" src="' . $artist->image[2] .
'" align="left" height="95" width="115"><br><br>';
$charts .= '<div>' . $artist->bio->summary . '</div></div>';
}
echo '<br>' . $charts . '<br>';
} else
echo 'Ошибка';

А можно ли сделать так чтобы например если я ввел eminem она переобразовалась на Eminem с зоглавной буквы

Спустя 1 минута, 1 секунда (21.02.2012 - 15:34) Winston написал(а):
Можно просто заменить это
$request = file_get_contents('http://ws.audioscrobbler.com/2.0/?artist=' . $search . '&' . http_build_query($params, '', '&'));
$xml = new SimpleXMLElement($request);

на
$xml = simplexml_load_file('http://ws.audioscrobbler.com/2.0/?artist=' . $search . '&' . http_build_query($params, '', '&'));




Спустя 2 минуты, 50 секунд Winston написал(а):
Цитата (rasul96 @ 21.02.2012 - 14:33)
А можно ли сделать так чтобы например если я ввел eminem она переобразовалась на Eminem с зоглавной буквы

Для латиницы и кириллицы в кодировке windows-1251 достаточно этого
ucfirst(strtolower($string));

Спустя 4 минуты, 15 секунд (21.02.2012 - 15:38) killer8080 написал(а):
Цитата (rasul96 @ 21.02.2012 - 14:33)
А можно ли сделать так чтобы например если я ввел eminem она переобразовалась на Eminem с зоглавной буквы

ucfirst(), ucwords() для юникода mb_convert_case($str, MB_CASE_TITLE, "UTF-8");

Спустя 3 минуты, 34 секунды (21.02.2012 - 15:42) rasul96 написал(а):
Понятно спасибо

Спустя 23 минуты, 48 секунд (21.02.2012 - 16:06) rasul96 написал(а):
Еще вопрос можно так прописать если в xml last fm api в информации исполнителя нет картин то уничтожить переменную

Спустя 19 минут, 57 секунд (21.02.2012 - 16:26) rasul96 написал(а):
Цитата (killer8080 @ 21.02.2012 - 12:38)
Цитата (rasul96 @ 21.02.2012 - 14:33)
А можно ли сделать так чтобы например если я ввел eminem она переобразовалась на Eminem с зоглавной буквы

ucfirst(), ucwords() для юникода mb_convert_case($str, MB_CASE_TITLE, "UTF-8");

Еще вопрос можно так прописать если в xml last fm api в информации исполнителя нет картин то уничтожить переменную

Спустя 13 минут, 43 секунды (21.02.2012 - 16:39) killer8080 написал(а):
Цитата (rasul96 @ 21.02.2012 - 15:26)
Еще вопрос можно так прописать если в xml last fm api в информации исполнителя нет картин то уничтожить переменную

Какую переменную?

Спустя 9 минут, 3 секунды (21.02.2012 - 16:48) rasul96 написал(а):
В базе lastfm есть много исполнителей без картинки и информации(просто имя) так вот как можно сделать так чтобы скрипт определил есть ли необходимая информация например картинка или краткая инфо

Спустя 1 минута, 44 секунды (21.02.2012 - 16:50) rasul96 написал(а):
И при необходимости выводить что такого исполнителя не существует

Спустя 3 минуты, 14 секунд (21.02.2012 - 16:53) killer8080 написал(а):
rasul96
в цикле проверяешь наличие соответствующего свойства, и при отсутствии просто пропускаешь итерацию, оператор continue;

Спустя 1 минута, 52 секунды (21.02.2012 - 16:55) rasul96 написал(а):
можете напечатать кратко как это сделать буду благодарен

Спустя 7 минут, 53 секунды (21.02.2012 - 17:03) killer8080 написал(а):
    foreach ($xml->artist as $artist) { 
if(empty($artist->image)) continue;
...

}

Спустя 4 минуты, 54 секунды (21.02.2012 - 17:08) rasul96 написал(а):
Спасибо

Спустя 5 часов, 44 минуты, 36 секунд (21.02.2012 - 22:53) ADiel написал(а):
я бы использовал isset.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.