壁板数据集PHP cURL API


Geckoboard data set PHP cURL API

好的,所以我一直在玩来自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

感谢您的帮助!

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

CURLOPT_PUT => 1

并替换为

CURLOPT_CUSTOMREQUEST => 'PUT'

至少让我发送数据。然后我收到了401(错误的请求)。这仅仅是因为身份验证的传递方式不同。所以我必须去掉

'Authorization', 'OAuth ' . $key
从头数组中取出

,而使用

CURLOPT_USERPWD =>  $key . ': '

这样我传入API密钥(作为一个用户)从geckoboard与一个空白密码(user:password)。

然后有一组其他的问题,但我终于得到了这个工作:)

p。谢谢你@Chris的帮助!总是对stackoverflow社区的总体帮助感到惊讶。

将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); */
}