我正在编写一个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这么多该死的时间,特别是不在页面加载上。
我希望这是有道理的!感谢您提前提供任何帮助!
答案 0 :(得分:0)
我想通了 - 我必须创建另外两个类似于第一个获得唱片的功能。 我将结果添加到原始选项更新中,因此它都在同一个db条目中。 一切都很好:))