如何从API获取数据并将其显示在PHP页面上?

时间:2019-06-12 22:08:26

标签: php wordpress curl

我想用来自API的一些数据在我的网站上创建一个页面。该网站是使用Wordpress建立的。

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

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;
        }
    ?>

1 个答案:

答案 0 :(得分:0)

如果您不熟悉API和相关的库,我认为您应该首先使用cURL来掌握一切。另外,使自己熟悉API的一种好方法是使用Postman。您也可以使用它在不同的代码库中生成某些API调用。

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

最终,解决问题的方法取决于很多因素,例如您要获取的数据类型以及显示方式。您是否可以通过单击按钮,页面加载等来请求数据?

我还建议您熟悉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();

?>