2011-08-24 54 views
2

我正在开发项目,并试图将摄影师的Flickr帐户与他的Wordpress网站进行整合。这个想法是将Wordpress网站与他的flickr同步。将JSON或XML API响应保存到Wordpress数据库

我使用Flickr API来获取他的picures URLS,描述,标签和设置并显示everyting。问题在于,对于每次访问,我都必须通过整个API响应并解析它。必须提取所有的链接,标签,说明等

我正在寻找一种方法来将此API响应(XML或JSON)“导入”到wordpress数据库并使用此数据。一旦他更新了他的flickr账户中的内容,我就可以选择更新数据库(或者可能只是数据库中的一张表)。此更新不需要是自动的。

回答

1

以下只是一个概念证明,并在仪表板中创建了一个菜单项,并带有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'] 
    ); 
} 

我将离开这些结果给读者的操纵。

建议:

WordPress StackExchange充满了很好的片段和技巧。

相关问题