【问题标题】:How to GET data from API and show it on PHP page?如何从 API 获取数据并将其显示在 PHP 页面上?
【发布时间】:2019-06-12 22:08:26
【问题描述】:

我想在我的网站上创建一个页面,其中包含来自 API 的一些数据。该网站是用 Wordpress 制作的。

我尝试了在网上找到的各种代码/功能,但没有成功。

API 要求我通过用户、密码或令牌(我更喜欢令牌)登录。

我是 API 和 PHP 的新手,我什至不知道从哪里开始。

如果有人以前用过,我想从 Exoclick API 获取数据。

从 Exoclick 上的 API 接口,我可以看到该请求是使用 curl 发出的,我以前从未使用过它,我不想使用它。这是一个例子

curl -X GET --header 'Accept: application/json' --header 'Authorization: Bearer tokenhere' 'https://api.exoclick.com/v2/statistics/publisher/country?'

从 API 手册中,我找到了这个用于登录的代码,但是将它放在一个随机页面中进行测试,它只会让我的网站崩溃:

<?php

        // Include Request and Response classes

        $url = 'https://api.exoclick.com/v2/login';

        $params = array(
                'api_token'  => 'tokenhere'
            );

        // Create a new Request object
        $request = new Request($url, 'POST', $params);

        // Send the request
        $request->send();

        // Get the Response object
        $response = $request->getResponse();

        if($response->getStatusCode() == 200) {

            // Retrieve the session token details
            $token = $response->getBodyDecoded();

            print_r($token);
        }
        else {

            echo $response->getStatusCode() . PHP_EOL;
            echo $response->getReasonPhrase() . PHP_EOL;
            echo $response->getBody() . PHP_EOL;
        }
    ?>

【问题讨论】:

  • 崩溃在哪一行?有什么错误?
  • 控制台没有错误,我收到一条消息(我认为来自 Wordpress):该站点遇到技术问题。
  • 不是控制台。 PHP 错误、服务器错误日志、API 错误。您必须找到脚本的结束位置(例如,通过注释所有代码行并从顶部一一取消注释)。
  • 在这一行:$request = new Request($url, 'POST', $params);
  • 对不起,我真的不知道 Exoclick API。它必须从 API 返回任何错误代码,或者写 st.进入服务器上的错误日志。检查两者,您会在某个地方找到答案。

标签: php wordpress curl


【解决方案1】:

如果您不熟悉 API 和相关的库,我认为您应该从使用 cURL 开始了解事情的窍门。此外,熟悉 API 的一个好方法是使用 Postman。您也可以使用它在不同的代码库中生成某些 API 调用。

在您的情况下,您首先需要获取一个不记名令牌,以便您可以请求您想要的数据。在我的示例中,我将向您展示两个可用于向 /campaigns 端点发出 GET 请求的函数,使用您从发出初始 POST 请求中获得的令牌。

最终,您的问题的解决方案取决于很多因素,例如您尝试获取的数据类型以及您希望如何显示它。您是否会通过按钮单击、页面加载等请求数据...

我还建议您熟悉 Ajax,以及如何使用 jQuery/JS 和 Wordpress 发出 Ajax 请求,因为这不仅可以帮助您使用此 API,还可以帮助您使用其他 API。还学习如何遍历返回给您的数据,无论是使用 PHP 对象还是数组。

这需要一些练习,但首先要拼凑一些可行的小部分,例如下面,您至少可以获取数据并将其回显到页面。

<?php

// A function that will make a GET request to the /campaigns endpoint

function get_data_from_api() {

// Run the function that will make a POST request and return the token

$exoclick_token = get_token_from_api();

$new_token = $exoclick_token->token;

$auth_array = array(
        "Authorization:",
        "Bearer",
        $new_token
);

$new_token = implode(" ", $auth_array);

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.exoclick.com/v2/campaigns",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_POSTFIELDS => "",
  CURLOPT_HTTPHEADER => array(
     $new_token,
     "Content-Type: application/json",
     "cache-control: no-cache"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

$data = json_decode($response, true);

// do something with the data

print_r($data);

}


function get_token_from_api() {

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.exoclick.com/v2/login",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "{\n\"api_token\": \"[ADD YOUR TOKEN]\"\n}",
  CURLOPT_HTTPHEADER => array(
    "Accept: */*",
    "Cache-Control: no-cache",
    "Connection: keep-alive",
    "Content-Type: application/json",
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

// Decode the response from the API

    $decoded_response_object = json_decode($response);

    curl_close($curl);

// Return the decoded response so you can use it to make another request
    return $decoded_response_object;

}

// Run the initial function
get_data_from_api();

?>

【讨论】:

  • 我有令牌。我现在不知道如何获取数据,但是一旦我知道如何登录和请求。我可能会设法获得所需的数据。我希望在页面加载时请求我的数据。我在 AJAX 之前尝试过为 Steam API 使用 jQuery/JS 编码(在 Tampermonkey 中获取一些小数据),但并不总是能够使其工作。我已经在页面上尝试了您的代码,但它在第一行中断。我还尝试将函数放在functions.php中并在我的页面中调用php标签,但仍然刹车。可能是我做错了什么,或者我的 Wordpress 有问题?
  • 我已经对此进行了测试并且它可以工作,但确实进行了一次编辑以将返回的数据转换为数组而不是对象。您拥有的令牌是 API 令牌。您仍然需要不记名令牌来发出请求。 API 令牌只是告诉 Exoclick 您是请求授权的有效用户。然后,Exoclick 会向您返回一个不记名令牌,您可以使用它来发出请求。确保在我显示 [ADD YOUR TOKEN] 的区域添加您自己的 API 令牌。
  • 我创建了一个帐户来测试这个,如果你用一个空帐户使用这个,最后会返回:Array ( [result] =&gt; Array ( ) [request_metadata] =&gt; Array ( [limit] =&gt; 50 [offset] =&gt; 0 [count] =&gt; 0 ) )
  • 我已经将我的 API 令牌放在您有一个示例令牌的地方。但是现在使用新代码,它可以工作并且结果与您的相似。我终于设法获取数据并将其放在我的页面上。还有一个问题,如果我需要从两个单独的链接获取数据,我是否要创建另一个函数来获取数据但不同的变量?非常感谢您的宝贵时间!
猜你喜欢
  • 2020-07-27
  • 1970-01-01
  • 2021-05-07
  • 2020-02-13
  • 2020-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多