Парсер Яндекс.Музыки

Posted by: 3pc   
сентября 11,
2015


Код рабочий (был, на момент его написания), но есть некоторые косяки:
массив замены жанров на их русские названия. в момент написания, не знал что нельзя использовать пробел. поэтому стоит например заменить в русских названиях пробелы на %20 (или урлэнкодом и т.п. обработать), а после замены жанра, декодировать для получения “красивого” текста.
может отпадать база данных (на нескольких хостах подобное наблюдалось), даже если инициализировать соединение не в начале, а каждый раз в цикле. пробовал разные драйвера, результат аналогичный. на локалхосте спокойно отрабатывал 1кк записей.

<?php
//error_reporting(E_ALL);
//ini_set('display_errors', 1);
set_time_limit(0);
$db = mysql_connect("localhost", "root", "");
mysql_select_db("parser");
mysql_query("SET NAMES UTF8");
$fp = fopen('links.txt', 'r') or die("Невозможно открыть файл!");
while (!feof($fp)) {
$url = trim(fgets($fp));
$data = file_get_contents($url);
preg_match('/{".*}/', $data, $regs);
$out = $regs[0];
$json_a = json_decode($out, true);
$genre_replace = array('Музыка всех жанров' => 'all', 'Поп' => 'pop', 'Инди' => 'indie', 'Рок' => 'rock', 'Метал' => 'metal', 'Альтернатива' => 'alternative', 'Электроника' => 'electronics', 'Электроника' => 'electronic', 'Танцевальная музыка' => 'dance', 'Рэп и хип-хоп' => 'rap', 'Рэп и хип-хоп' => 'hip-hop', 'R&B' => 'rnb', 'R&B' => 'r-n-b', 'Джаз' => 'jazz', 'Блюз' => 'blues', 'Регги' => 'reggae', 'Ска' => 'ska', 'Панк' => 'punk', 'Музыка мира' => 'folk', 'Музыка мира' => 'world', 'Классическая музыка' => 'classical', 'Эстрада' => 'estrada', 'Шансон' => 'shanson', 'Кантри' => 'country', 'Саундтреки' => 'soundtrack', 'Лёгкая музыка' => 'relax', 'Лёгкая музыка' => 'easy', 'Авторская песня' => 'bard', 'Авторская песня' => 'singer-songwriter', 'Другая музыка' => 'other', 'Диско' => 'disco', 'Прогрессивный рок' => 'prog', 'Прогрессивный рок' => 'prog-rock', 'Рок-н-ролл' => 'rnr', 'Рок-н-ролл' => 'rock-n-roll', 'New Wave' => 'newwave', 'New Wave' => 'new-wave', 'Русский рок' => 'rusrock', 'Дабстеп' => 'dubstep', 'Индастриал' => 'industrial', 'Экспериментальная музыка' => 'experimental', 'Хаус' => 'house', 'Техно' => 'techno', 'Транс' => 'trance', 'Драм-н-бэйс' => 'dnb', 'Драм-н-бэйс' => 'drum-n-bass', 'Русский рэп' => 'rusrap', 'R&B и Урбан' => 'urban', 'Соул' => 'soul', 'Фанк' => 'funk', 'Традиционный джаз' => 'tradjazz', 'Традиционный джаз' => 'trad-jass', 'Современный джаз' => 'conjazz', 'Современный джаз' => 'modern-jazz', 'Реггетон' => 'reggaeton', 'Даб' => 'dub', 'Хардкор и панк' => 'hardcore', 'Русская музыка' => 'rusfolk', 'Русская музыка' => 'russian', 'Кельтская музыка' => 'celtic', 'Балканская музыка' => 'balkan', 'Европейская музыка' => 'eurofolk', 'Европейская музыка' => 'european', 'Еврейская музыка' => 'jewish', 'Восточная музыка' => 'eastern', 'Африканская музыка' => 'african', 'Латиноамериканская музыка' => 'latinfolk', 'Латиноамериканская музыка' => 'latin-american', 'Американская музыка' => 'amerfolk', 'Американская музыка' => 'american', 'Опера и вокал' => 'vocal', 'Опера и вокал' => 'opera', 'Современная классика' => 'modern', 'Современная классика' => 'modern-classical', 'Мюзиклы' => 'musical', 'Болливуд' => 'bollywood', 'Лаундж' => 'lounge', 'Нью-эйдж' => 'newage', 'Нью-эйдж' => 'new-age', 'Музыка для медитации' => 'meditation', 'Музыка для медитации' => 'meditative', 'Детская музыка' => 'children', 'Спортивная музыка' => 'sport', 'Праздничная музыка' => 'holiday');
$genre = $json_a['genre'];
$genre = array_search($genre, $genre_replace); //genre_rus
$genre_rus = mysql_real_escape_string($genre);
$artist = mysql_real_escape_string($json_a['byArtist']['name']); //artist
$artist_url = "https://music.yandex.ru".$json_a['byArtist']['url']; //artist_page
$artist_url = mysql_real_escape_string($artist_url);
$genre = mysql_real_escape_string($json_a['genre']); //genre
$album_name = mysql_real_escape_string($json_a['name']); //album_name
$track_count = mysql_real_escape_string($json_a['numTracks']); //num_tracks
$album_cover = mysql_real_escape_string($json_a['image']); //cover_big
$album_url = "https://music.yandex.ru".$json_a['url']; //album_url
$album_url = mysql_real_escape_string($album_url);
$track_list = "";
for ($i = 0; $i < count($json_a['track']); $i++) {//track_list
$time = $json_a['track'][$i]['duration'];
$time = preg_replace('/PT(\\d*)M(\\d*)S/', '$1:$2', $time);
$track_list .= "<li>".$json_a['track'][$i]['name']." - ".$time."</li>";
}
$track_list = "<ol>".$track_list."</ol>";
$track_list = mysql_real_escape_string($track_list);
//echo '<pre>'.print_r($json_a, true);
mysql_query("INSERT INTO ya_music(auto_id, artist, artist_url, genre, genre_rus, album_name, album_url, track_count, album_cover, track_list) VALUES ('', '$artist', '$artist_url', '$genre', '$genre_rus', '$album_name', '$album_url', '$track_count', '$album_cover', '$track_list')");
echo "Спарсил ".$url."<br />";
}
fclose($fp);
?>

Похожие записи:

  1. Парсер яндекс каталога В поисках рабочего инструмента для парсинга яндекс каталога перелопатил некоторое количество программ и скриптов. О той что больше всего мне...
  2. Убираем рекламу в браузере: яндекс, google chrome, opera, mazilla, амиго и других. Всем известно выражение “Реклама двигатель прогресса” и не собирается оспаривать его, но вот навязчивая реклама всплывающая в самых неожиданных местах,...
Эта запись опубликована в Пятница, 11 сентября, 2015 в 18:15.
Вы можете следить за этой записью через RSS 2.0.
Так же вы можете добавить комментарий, или trackback со своего сайта.

Добавить комментарий

Имя (обязательно)
Mail (обязательно)
URL
Текст комментария