无法从hasoffer API

时间:2016-02-22 02:05:15

标签: php json

尝试读取json数据,但我无法使用以下代码正常工作:

$apiurl = "https://api.hasoffers.com/Apiv3/json?NetworkId=REDACTED&Target=Affiliate_Report&Method=getStats&api_key=REDACTED&fields%5B%5D=Stat.conversions&fields%5B%5D=Stat.unique_clicks&fields%5B%5D=Stat.payout&filters%5BStat.date%5D%5Bconditional%5D=LESS_THAN&filters%5BStat.date%5D%5Bvalues%5D=2016-02-21&filters%5BStat.date%5D%5Bconditional%5D=GREATER_THAN&filters%5BStat.date%5D%5Bvalues%5D=2016-02-21";


$data = json_decode(file_get_contents($apiurl), true);

foreach($data['response']['data'] as $dataline) {

    echo "Conversions: {$dataline['Stat']['conversions']} Payout: {$dataline['Stat']['payout']}";

}

查询生成了以下json返回,我只是无法弄清楚如何正确读取统计数据(它也循环遍历foreach中的7行,这对我来说也没有意义):

  

{ “请求”:{ “目标”: “Affiliate_Report”, “格式”: “JSON”, “服务”: “HasOffers”, “版本”: “2”, “NETWORKID”: “绝密”,”方法 “:” getStats”, “API_KEY”: “绝密”, “字段”:[ “Stat.conversions”, “Stat.unique_clicks”, “Stat.payout”], “过滤器”:{ “Stat.date”: { “有条件的”: “GREATER_THAN”, “值”: “2016年2月21日”}}, “__ gaTune”: “GA1.2.1289716345.1455904273”, “__ UTMA”: “267117079.1377304869.1455903853.1455904273.1455904273.1”, “__ UTMC” : “267117079”, “__ utmz”: “267117079.1455904273.1.1.utmcsr = developers.hasoffers.com | utmccn =(引荐)| utmcmd =转诊| utmcct = /”, “_ biz_uid”: “1742fd1f613440a4cfbb5a510d1d7def”, “_ biz_nA”:” 1" , “_ biz_pendingA”: “[]”, “_ hp2_id_1318563364”: “5257773084071598.0276720083.0714677778”, “_ GA”: “GA1.2.1377304869.1455903853”}, “响应”:{ “状态”:1, “则httpStatus”: 200, “数据”:{ “页面”:1, “当前”:50, “计数”:1, “PAGECOUNT”:1, “数据”:[{ “STAT”:{ “转化”: “1000”, “unique_clicks”: “1000”, “支付”: “1000.000000”}}], “dbSource”: “branddb”}, “错误”:[] “的errorMessage”:空}}

2 个答案:

答案 0 :(得分:0)

如果您的JSON完全是您发布的,那么根据评论,它是无效的JSON。

无效部分是没有双引号的REDACTED字。

要绕过此错误,您可以尝试这种方式:

$data = file_get_contents( $apiurl );
$data = preg_replace( '/:REDACTED(?=\W)/', ':"REDACTED"', $data );

$json = json_decode( $data, True );

这将适用于上面的示例,但请注意这是一个技巧,如果某些JSON字段的类似于"某些文字,无法正常工作 :删除,某些文字":这是不可能的,但并非不可能。

答案 1 :(得分:0)

实际上,非常感谢网站帮助很多人意识到在第一个“数据”数组下还有第二个数组也标记为“数据”,所以我需要将其更改为:

$ data ['response'] ['data'] ['data'] as $ dataline