在wordpress中获取bandcamp用户唱片json

时间:2014-02-07 00:10:05

标签: php json wordpress api

我正在编写一个WordPress插件,用于从Bandcamp获取所有个人版本(唱片)并在WordPress网站上显示。

供参考:http://bandcamp.com/developer

我设法获得了第一次调查,并将其存储在数据库中,并使用网站上json文件中的任何信息。

/*
 *  assign global variables
 *
*/
$plugin_url = WP_PLUGIN_URL . '/bandcamp-integration';
$options = array();

/*
 *  create admin menu link under 'Settings > Bandcamp'
 *
*/

function bodhi_bi_admin_menu() {

    add_options_page(
        'Bandcamp Integration',
        'Bandcamp',
        'manage_options',
        'bi-options',
        'bodhi_bi_options_page'
    );

}
add_action( 'admin_menu', 'bodhi_bi_admin_menu' );

/*
 *  create admin options page under 'Settings > Bandcamp'
 *
*/

function bodhi_bi_options_page() {

    if( ! current_user_can( 'manage_options' ) ) {

        wp_die( 'Nice try, you cannot access this page.' );

    }

    global $plugin_url;
    global $options;

    if( isset( $_POST['bodhi_bi_band_id_form_submitted'] ) ) {

        $hidden_field = esc_html( $_POST['bodhi_bi_band_id_form_submitted'] );

        if( $hidden_field == 'Y' ) {

            $bodhi_bi_band_id = esc_html( $_POST['bodhi_bi_band_id'] );
            $bodhi_bi_bc_discog = bodhi_bi_get_bandcamp_discog( $bodhi_bi_band_id );

            $options['bodhi_bi_band_id']    = $bodhi_bi_band_id;
            $options['bodhi_bi_bc_discog']  = $bodhi_bi_bc_discog;
            $options['last_updated']        = time();

            update_option( 'bodhi_bi_discog', $options );

        }

    }

    $options = get_option( 'bodhi_bi_discog' );

    if( $options != '' ) {

        $bodhi_bi_band_id = $options['bodhi_bi_band_id'];
        $bodhi_bi_bc_discog = $options['bodhi_bi_bc_discog'];

    }

    // options page markup
    require( 'includes/options-page-wrapper.php' );

}

/*
 *  get bandcamp discography
 *
*/

function bodhi_bi_get_bandcamp_discog( $bodhi_bi_band_id ) {

    // WHY YOU NOT WORK???
    //$json_feed_discog_url = 'http://api.bandcamp.com/api/band/3/discography?key=' . $bc_dev_key . '&band_id=' . $bodhi_bi_band_id;

    // WORKS
    $json_feed_discog_url = 'http://api.bandcamp.com/api/band/3/discography?key=ACTUALBANDCAMPKEYHERE&band_id=' . $bodhi_bi_band_id;

    $args = array( 'timeout' => 120 );

    $json_feed_discog = wp_remote_get( $json_feed_discog_url, $args );

    $bodhi_bi_bc_discog = json_decode( $json_feed_discog['body'] );

    return $bodhi_bi_bc_discog;

}

这会将discography json feed存储在数据库中,这样我就可以从中调用信息:

// count total number of releases in discography
$total_releases = count( $bodhi_bi_bc_discog->discography );
echo 'Number of releases: ' . $total_releases;

OR

// list layout (inline styles just for testing)
foreach( $bodhi_bi_bc_discog->discography as $result ) {
    echo '<li style="width:100%;list-style:none;border-bottom:1px solid #ccc;padding-bottom:2.2em;overflow:hidden;">';
    echo '<h2 style="font-weight:normal;">' . $result->title . '</h2>';
    echo '<img style="float:left;margin-right:1em;" src="' . $result->large_art_url . '" alt="' . $result->title . '" />';
    echo $result->artist;
    echo '<br />';
    echo $result->title;
    echo '<br />';
    echo '<a href="' .$result->url . '?action=buy">BUY</a>';
    echo '<br />';
    echo '<a href="' .$result->url . '?action=download">DOWNLOAD</a>';
    echo '</li>';
}

我的问题是,Bandcamp会让您将每张专辑的信息与唱片分开,然后再将每首歌曲的信息分别拉出(以获取有关每首曲目的流媒体网址和特定信息) )。

我设法将所有的album_id和track_id输出到数组然后foreach - 将它们添加到正确的url以检索json,但这只是在页面模板中我希望功能齐全。

$album_ids = array();
$track_ids = array();

for( $i=0; $i<=count( $bodhi_bi_bc_discog->discography ); $i++ ) {

    if ( $bodhi_bi_bc_discog->{'discography'}[$i]->{'album_id'} != '' ) {

        $album_ids[$i] = $bodhi_bi_bc_discog->{'discography'}[$i]->{'album_id'};

    }

    if ( $bodhi_bi_bc_discog->{'discography'}[$i]->{'track_id'} != '' ) {

        $track_ids[$i] = $bodhi_bi_bc_discog->{'discography'}[$i]->{'track_id'};

    }

    // echo '<br />loop works';
}

foreach( $album_ids as $album_id ) {
    $feed_url = 'http://api.bandcamp.com/api/album/2/info?key=' . $bc_dev_key . '&album_id=' . $album_id;
    echo '<br />' . $feed_url;
}
foreach( $track_ids as $track_id ) {
    $feed_url = 'http://api.bandcamp.com/api/track/3/info?key=' . $bc_dev_key . '&track_id=' . $track_id;
    echo '<br />' . $feed_url;
}

所以,我真的很感激帮助获取所有这些提要并存储在数据库中,就像我对主要的唱片一样。 然后我还需要做类似的事情来获取每张专辑的曲目。

最终,我只需要访问每一点信息,从数据库中获取完整的唱片,而不必调用bandcamp api这么多该死的时间,特别是不在页面加载上。

我希望这是有道理的!感谢您提前提供任何帮助!

1 个答案:

答案 0 :(得分:0)

我想通了 - 我必须创建另外两个类似于第一个获得唱片的功能。 我将结果添加到原始选项更新中,因此它都在同一个db条目中。 一切都很好:))