1

我使用以下代码从 discogs 的特定记录中获取数据:

//initialize the session
$ch = curl_init();

//Set the User-Agent Identifier
curl_setopt($ch, CURLOPT_USERAGENT, 'MYAPPNAME/0.1 +http://ymysite.com');

//Set the URL of the page or file to download.
curl_setopt($ch, CURLOPT_URL, $url);

//Ask cURL to return the contents in a variable instead of simply echoing them
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

//Execute the curl session
$output = curl_exec($ch);

//close the session
curl_close ($ch);

我可以 echo $output 这会给我一个非常复杂的输出:

{"styles": ["Blues Rock", "Rock & Roll"], "videos": [{"duration": 200, "embed": true, "title": "The Rolling Stones - Street Fighting Man", “描述”:“滚石乐队 - 街头霸王”,“uri”:“ http://www.youtube.com/watch?v=qUO8ScYVeDo ”},{“duration”:2457,“embed”:true, "title": "The Rolling Stones - Beggars Banquet FULL ALBUM (mono 黑胶混音)", "description": "The Rolling Stones - Beggars Banquet FULL ALBUM (mono 黑胶混音)", "uri": " http://www .youtube.com/watch?v=sRu88xttBrA "}], "系列": [], "标签": [{"resource_url": " http://api.discogs.com/labels/5320 ", "entity_type": "1", "catno": "SKL 4955", "id": 5320, "name": "Decca"}]...还有更多...

例如,我如何使用 PHP 从“styles”中获取信息,以便输出“Blues Rock, Rock & Roll”?也许我还想从“描述”中获取信息以输出“滚石乐队 - 乞丐宴会全专辑(单乙烯基混合)”。

亲切的问候约翰

4

1 回答 1

1
<?php
$output = '{"styles": ["Blues Rock", "Rock & Roll"], "videos": [{"duration": 200, "embed": true, "title": "The Rolling Stones - Street Fighting Man", "description": "The Rolling Stones - Street Fighting Man", "uri": "http://www.youtube.com/watch?v=qUO8ScYVeDo"}, {"duration": 2457, "embed": true, "title": "The Rolling Stones - Beggars Banquet FULL ALBUM (mono vinyl mix)", "description": "The Rolling Stones - Beggars Banquet FULL ALBUM (mono vinyl mix)", "uri": "http://www.youtube.com/watch?v=sRu88xttBrA"}], "series": [], "labels": [{"resource_url": "http://api.discogs.com/labels/5320", "entity_type": "1", "catno": "SKL 4955", "id": 5320, "name": "Decca"}]...There is more...';

function textParser($text, $css_block_name){

    $end_pattern = '], "';

    switch($css_block_name){
        # Add your pattern here to grab any specific block of text
        case 'description';
            $end_pattern = '", "';
            break;
    }

    # Name of the block to find
    $needle = "\"{$css_block_name}\":";

    # Find start position to grab text
    $start_position = stripos($text, $needle) + strlen($needle);

    $text_portion = substr($text, $start_position, stripos($text, $end_pattern, $start_position) - $start_position + 1);
    $text_portion = str_ireplace("[", "", $text_portion);
    $text_portion = str_ireplace("]", "", $text_portion);

    return $text_portion;
}

$blockStyle = textParser($output, 'styles');
echo $blockStyle. '<br/>';

$blockDescription = textParser($output, 'description');
echo $blockDescription. '<br/>';

它将帮助您获取所需的所有区域,您需要根据需要修改脚本。希望它可以帮助你:)

于 2015-03-19T19:34:47.753 回答