xml - 将 JSON 或 XML API 响应保存到 Wordpress 数据库

标签 xml database json wordpress api

我正在做项目,我正在尝试将摄影师的 Flickr 帐户与他的 Wordpress 网站集成。这个想法是将 Wordpress 网站与他的 flickr 同步。

我正在使用 Flickr API 获取他的图片 URLS、描述、标签和集合并显示所有内容。问题是每次访问我都必须通过整个 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']
    );
}

我会将这些结果的处理留给读者。

建议:

WordPress StackExchange 充满了不错的片段和技巧。

关于xml - 将 JSON 或 XML API 响应保存到 Wordpress 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7173971/

相关文章:

android - 使用 x.509 android 对 XML 进行签名

javascript - 在 HTML 表格中显示 XML 文件

database-design - Cassandra,设计用户喜欢的项目表

mysql - 数据库设计 : how to deal with a table that has non-unique foreign keys

sql - 如何从多对多表中选择一对一关系

c# - 使用 ServiceStack.Text 序列化接口(interface)类型列表

Java 为 Android 解析 JSON

javax.xml.transform.Transformer 转换后交换元素属性

android - drawable 中的 xml 文件,可用于所有分辨率

javascript - 另一种在转换为 ISO 字符串后不切片返回日期/时间的方法?