首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在wordpress中获取bandcamp用户磁盘json

在wordpress中获取bandcamp用户磁盘json
EN

Stack Overflow用户
提问于 2014-02-07 08:10:05
回答 1查看 495关注 0票数 0

我正在写一个WordPress插件,以获取所有的个人释放(唱片)从乐队和显示在WordPress网站上。

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

我已经设法获得了对光盘的第一个调用,并将其存储在数据库中,并使用站点周围的json文件中的任何信息。

代码语言:javascript
复制
/*
 *  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提要,因此我可以像这样调用其中的信息:

代码语言:javascript
复制
// count total number of releases in discography
$total_releases = count( $bodhi_bi_bc_discog->discography );
echo 'Number of releases: ' . $total_releases;

代码语言:javascript
复制
// 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会让你把每张专辑的信息从唱片目录中分别拉出来,然后再把每首曲目的信息分开(为了得到流媒体url和每首曲目的具体信息)。

我设法将所有的all _id和track_id放入数组中,然后foreach - add它们到正确的url中来检索json,但目前这只是在一个页面模板中,我希望它都在函数中。

代码语言:javascript
复制
$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这么多次,尤其是在页面加载时。

我希望这是有意义的!提前感谢大家的帮助!

EN

回答 1

Stack Overflow用户

发布于 2014-02-12 16:54:33

我弄明白了--我必须创建另外两个函数,类似于第一个获得磁盘图形的函数。我将结果添加到原始选项update中,因此它们都在同一个db条目中。all good :)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21616811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档