如何使用WordPress短代码API结合coinmarketcap API进行过滤

时间:2018-02-28 21:28:28

标签: php wordpress api

所以我正在使用coinmarketcap api并尝试将其与WordPress结合使用。

在WordPress中我使用以下php代码:

function api() {
$url = 'https://api.coinmarketcap.com/v1/ticker/?start=0&limit=250';
$response = wp_remote_get( esc_url_raw( $url ) );
$api_response = json_decode( wp_remote_retrieve_body( $response ), true );
$name = $api_response[1]["name"];
$usd = $api_response[1]["price_usd"];
echo $name . "<br />";
echo $usd;
}
add_shortcode( 'api_short', 'api' );

所以这段代码正常运行,我使用短码api_short在WordPress页面上得到了我的结果。

我现在的问题是我想通过以下方式使用短代码:

[api short name =&#34; 20&#34;]

这样我只需使用短代码就可以轻松切换数据,而不是一直改变代码。

&#39;名称&#39;在这种情况下,变量是加密货币的名称,如下所示:https://api.coinmarketcap.com/v1/ticker/?start=0&limit=250。 0 =比特币,1 =以太坊。

我希望有人知道如何让这个工作,我尝试了一些事情,但到目前为止没有结果。

可以在此处找到WordPress短代码文档:https://codex.wordpress.org/Shortcode_API

1 个答案:

答案 0 :(得分:0)

一些事情:

第一:

在您的功能前缀 - 特别是如果您使用的是具有全球范围或吸引力的名称。

api()应该与solaiman_api()一致,以防止任何冲突。

第二

您应该使用WP Transients API来缓存结果,这样您就不会对CMC API进行速率限制

第三

对于问题的实际答案,您只需要在URL中参数化输入值。

function solaiman_api( $atts ) {
    extract( shortcode_atts( array(
        'placeholder' => ''
    ), $atts ) );

    $coin  = $atts['coin'] ? $atts['coin'] : 0; // Default to 0 for BTC
    $limit = $atts['limit'] ? $atts['limit'] : 250; // Default to 250

    $url = 'https://api.coinmarketcap.com/v1/ticker/?start='. $coin .'&limit='. $limit;

    $response     = wp_remote_get( esc_url_raw( $url ) );
    $api_response = json_decode( wp_remote_retrieve_body( $response ), true );

    foreach( $api_response as $c ){
        echo $c['name'].': $'.$c['price_usd'].'<br />';
    }
}
add_shortcode( 'cmc_api', 'solaiman_api' );

注意我更改了您的功能名称和短代码,因为api_short并不是非常具有描述性。

这个短代码现在看起来像这样:

[cmc_api coin="1" limit="1"]

哪个应该只给你以太坊的价格。

请改用此代码:

根据CMC的服务条款,这是一个更好的将结果缓存10分钟的方法:

function solaiman_api( $atts ) {
    extract( shortcode_atts( array(
        'placeholder' => ''
    ), $atts ) );

    $coin  = $atts['coin'] ? $atts['coin'] : 0; // Default to 0 for BTC
    $limit = $atts['limit'] ? $atts['limit'] : 250; // Default to 250

    $url = 'https://api.coinmarketcap.com/v1/ticker/?start='. $coin .'&limit='. $limit;

    $transient_name = 'cmc_api_'.$coin.'_'.$limit; // One transient per coin per limit

    if( false === ( $response = get_transient( $transient_name ) ) ){
        $response = wp_remote_get( esc_url_raw( $url ) );
        set_transient( $transient_name, $response, 600 ); // Cache for 10 minutes
    }

    $api_response = json_decode( wp_remote_retrieve_body( $response ), true );

    foreach( $api_response as $c ){
        echo $c['name'].': $'.$c['price_usd'].'<br />';
    }
}
add_shortcode( 'cmc_api', 'solaiman_api' );

您可以在此处查看[cmc_api coin="1" limit="1"]的示例:http://xhynk.com/headless/2018/02/28/cmc-test/