将JSON或XML API响应保存到Wordpress数据库
问题描述:
我正在开发项目,并试图将摄影师的Flickr帐户与他的Wordpress网站进行整合。这个想法是将Wordpress网站与他的flickr同步。将JSON或XML API响应保存到Wordpress数据库
我使用Flickr API来获取他的picures URLS,描述,标签和设置并显示everyting。问题在于,对于每次访问,我都必须通过整个API响应并解析它。必须提取所有的链接,标签,说明等
我正在寻找一种方法来将此API响应(XML或JSON)“导入”到wordpress数据库并使用此数据。一旦他更新了他的flickr账户中的内容,我就可以选择更新数据库(或者可能只是数据库中的一张表)。此更新不需要是自动的。
答
以下只是一个概念证明,并在仪表板中创建了一个菜单项,并带有Flickr API响应的结果。
add_action('admin_menu', function()
{
add_menu_page(
'Flicker',
'Flicker',
'add_users',
'fck_admin',
'consult_flickr_api_so_7173971',
'http://i.stack.imgur.com/s2ons.png',
2
);
});
function consult_flickr_api_so_7173971()
{
$api_key = 'YOUR-KEY';
$secret_key = 'YOUR-SECRET'; // not needed for public data
$uid = 'USER-ID-TO-CONSULT';
$url = 'https://api.flickr.com/services/rest/?&method=flickr.people.getPublicPhotos&api_key='
. $api_key
. '&user_id='
. $uid
. '&format=json&nojsoncallback=1&per_page=15'; // maximum 500
$flickr = wp_remote_get($url, array('timeout' => 120, 'httpversion' => '1.1'));
if ($flickr['response']['code'] == '200')
{
$flickr_array = json_decode($flickr['body'], true);
foreach($flickr_array['photos']['photo'] as $photo)
{
echo '<h2>' . $photo['title'] . '</h2>';
get_flickr_photo_so_7173971($photo['id']);
}
}
}
/**
http://www.flickr.com/services/api/
Useful Methods
- getExif
- getInfo
- getSizes
*/
function get_flickr_photo_so_7173971($photo_id, $method = 'getSizes')
{
$api_key = 'YOUR-KEY';
$flickr = wp_remote_get(
'https://api.flickr.com/services/rest/?&method=flickr.photos.'
. $method
. '&api_key='
. $api_key
. '&photo_id='
. $photo_id
. '&format=json&nojsoncallback=1',
array(
'timeout' => 120,
'httpversion' => '1.1'
)
);
if ($flickr['response']['code'] == '200')
{
$flickr_array = json_decode($flickr['body'], true);
$no_print = true;
foreach($flickr_array['sizes']['size'] as $size)
{
if($size['label'] == 'Medium') {
print_photo_so_7173971($size);
$no_print = false;
}
}
// No medium size was found, just print the first one
if($no_print)
{
print_photo_so_7173971($flickr_array['sizes']['size'][0]);
}
}
}
function print_photo_so_7173971($size)
{
printf(
'<img src="%s" width="%s" height="%s" /><br />',
$size['source'],
$size['width'],
$size['height']
);
}
我将离开这些结果给读者的操纵。
建议:
- 建立一个cron作业提取信息,并做你的东西。使用它作为参考:Website widget to display Apple App store price drops?
- 创建一个选项页面,并显示结果的缩略图,扩展信息和按钮来发送一些动作(图像侧加载,创建新帖子等),请参阅here和here。
WordPress StackExchange充满了很好的片段和技巧。