2

好的,所以我一直在使用Geckoboard中的新数据集 这(参见下面的前 #1)是文档中的一个示例(我在 unix 命令行中尝试过,它工作得很好)。但我需要在 PHP 文件中运行它(在此之前,我在我的 PHP 中从 WooCommerce 收集数据)。

前 #1

  curl https://api.geckoboard.com/datasets/sales.gross/data \
        -X PUT \
        -u '222efc82e7933138077b1c2554439e15:' \
        -H 'Content-Type: application/json' \
        -d '{
        "data": [
            {
            "timestamp": "2016-01-01T12:00:00Z",
            "amount": 819
            },
            {
            "timestamp": "2016-01-02T12:00:00Z",
            "amount": 409
            },
            {
            "timestamp": "2016-01-03T12:00:00Z",
            "amount": 164
            }
    ]
}'

我试过这个

/*****************
*
*   GECKOBOARD
*
*****************/

// API URL
$url    = 'https://api.geckoboard.com/datasets/sales.[DATA_SET_NAME]/data';
$key    = '[MY_API_KEY]';

$data_array = array(
    'net' => $weeklynet,
    'timestamp' => date('Y-m-d h:m:s')
);

// create a new cURL resource
$ch = curl_init();

// set URL and other appropriate options
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_PUT => 1,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => array(
        'Content-Type: application/json',
        'Authorization', 'OAuth ' . $key
        ),
    CURLOPT_POSTFIELDS => $data_array
);

curl_setopt_array($ch, $options);

// grab URL and pass it to the browser
curl_exec($ch);

// close cURL resource, and free up system resources
curl_close($ch);

但什么也没有发生。我不太熟悉 cURL 和 PHP(或者根本不熟悉)。是否有人可以帮助我将命令行 cURL“翻译”为“正确”的 PHP 版本?此外,不确定日期是否正确输出,格式必须为 YYYY-MM-DDTHH:MM:SSZ

感谢您的帮助!

4

2 回答 2

2

好的,经过一夜的搜索和测试,我终于找到了一个可行的解决方案。我不确定为什么我首先要获得 411,但事实证明移除

CURLOPT_PUT => 1

并将其替换为

CURLOPT_CUSTOMREQUEST => 'PUT'

至少让我发送数据。然后我收到了 401(错误请求)。这仅仅是因为通过身份验证的方式。所以我不得不删除

'Authorization', 'OAuth ' . $key

从标头数组中改为使用

CURLOPT_USERPWD =>  $key . ': '

通过这种方式,我使用空白密码(用户:密码)从 geckoboard 传递 API 密钥(作为用户)。

然后还有一系列其他问题,但无论如何我终于得到了这个工作:)

PS。感谢@Chris 试图提供帮助!stackoverflow 社区的普遍帮助总是同样令人惊讶。

于 2016-10-04T08:01:11.880 回答
0

将 curl_exec() 命令分配给变量并查看它返回的内容。

$content = curl_exec($ch);
$headers = curl_getinfo($ch);
curl_close($ch);
if($headers['http_code'] < 400){
    /* Do stuff as needed starting with perhaps:
       echo "<pre>";
       print_r($content); */
}

在这里查看 curl 的 php 手册。

于 2016-10-03T13:14:22.573 回答