Задать вопрос
AllDecay
@AllDecay
Вечно отдыхающий.

Как распарсить json ответ от ВКонтакте?

Решил для своего паблика сделать что-то вроде "радио" на основе трансляции треков в статус. Написал следующий php скрипт который парсил регулярками id треков и сохранял в базу.
<?
$ids = array();
try {
    $dbh = new PDO('mysql:host=localhost;dbname=music', 'root', '');
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}
$access_token = '';
$id = '';
$tracks = 'https://api.vk.com/method/audio.get?owner_id='.$id.'&need_user=0&offset=0&count=300&access_token='.$access_token;
preg_match_all('/"aid":(.*?)"/si' ,file_get_contents($tracks),$aResult);
array_push($ids, $aResult[1]);
foreach ($ids as $ids_re) {
    foreach ($ids_re as $aid) {
        $sound_id = explode(",", $aid);
        $stmt = $dbh->prepare("INSERT IGNORE INTO `music` (id, hash) VALUES (:id, :hash)");
        $stmt->bindParam(':id', $sound_id[0]);
		$stmt->bindParam(':hash', md5($sound_id[0]));
		$stmt->execute();
		$dbh = null;
	}
}
?>

Поставил в крон каждые три минуты и столкнулся со следующей проблемой: треки, время воспроизведения которых меньше трех минут просто обрывали трансляцию и приходится ждать пока крон не выполнит свою работу.
Суть вопроса: как распарсить нижеприведенный json и иды всех песен, продолжительность которых больше 180сек, залить в бд.
{  
  "response":[  
    620,
    {  
      "aid":643634345,
      "owner_id":115226501,
      "artist":"Example1",
      "title":"blablabla ",
      "duration":272,
      "url":"https:\/\/cs9-6v4.vk.me\/p16\/4c24ea770894d1.mp3?extra=OEg_VT_MGAyoZL5qaXZ4dXtT9-rq8quieG5pXg0Dbk69H1kHrywXav2QQ33cEuWdhqFjTLQKvzlkOfnnAPF2jDJEHMvO-Nwi0w",
      "genre":9
    },
    {  
      "aid":1265631316,
      "owner_id":115226501,
      "artist":"Example2",
      "title":"blablabla ",
      "duration":272,
      "url":"https:\/\/cs9-6v4.vk.me\/p16\/4c24ea770894d1.mp3?extra=OEg_VT_MGAyoZL5qaXZ4dXtT9-rq8quieG5pXg0Dbk69H1kHrywXav2QQ33cEuWdhqFjTLQKvzlkOfnnAPF2jDJEHMvO-Nwi0w",
      "genre":9
    },
    {  
      "aid":1251265125,
      "owner_id":115226501,
      "artist":"Example3",
      "title":"blablabla ",
      "duration":160,
      "url":"https:\/\/cs9-6v4.vk.me\/p16\/4c24ea770894d1.mp3?extra=OEg_VT_MGAyoZL5qaXZ4dXtT9-rq8quieG5pXg0Dbk69H1kHrywXav2QQ33cEuWdhqFjTLQKvzlkOfnnAPF2jDJEHMvO-Nwi0w",
      "genre":9
    }
  ]
}
  • Вопрос задан
  • 310 просмотров
Подписаться 1 Оценить 4 комментария
Решения вопроса 1
miraage
@miraage
Старый прогер
$result = file_get_contents($tracks);
$response = json_decode($result, true);

// Посмотрите, что тут - дальше сами
var_dump($response);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
AllDecay
@AllDecay Автор вопроса
Вечно отдыхающий.
<?
$result = file_get_contents($tracks);
$response = json_decode($result, true);

foreach ($response as $track) {
    foreach ($track as $track_aid) {
		if ($track_aid[duration] > '180')
        echo $track_aid[aid].'</br>';
	}
}
?>

Уже все сделал сам)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы