我无法从usaspending.gov api中获取工作

时间:2014-05-20 16:17:37

标签: php api web-scraping

我从usaspending.gov抓取数据时遇到错误,我无法弄清楚原因。我已经检查过我的php设置都是打开的,甚至还设置了另一个随机网站的测试网页。

我采取了另一个步骤来包含方法和useragent的选项。

我怀疑它已超时,但如果不是这样,我不知道还有什么可以尝试让它发挥作用。我尝试的每个其他网址,我都没有问题。如果有人有任何建议,我很乐意阅读它们!

这是我的示例代码。

$opts = array(
      'http'=>array(
        'method'=>"GET",
        'user_agent'=>"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8",
        'timeout'=>60
      )
    );

    $context = stream_context_create($opts);
    $test = file_get_contents('http://www.usaspending.gov/fpds/fpds.php?state=MI&detail=c&fiscal_year=2013',false,$context);

我还要补充一点,我用fopen,file_get_contents和simplexml_load_file尝试了这个,没有运气。我已经尝试了fopen和file_get_contents的扩展选项,没有变化。我确定我错过了一些小东西,只是无法弄清楚它是什么。

编辑:这是错误消息

Warning: file_get_contents(http://www.usaspending.gov/fpds/fpds.php?state=MI&detail=c&fiscal_year=2013) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in...

此外,链接工作正在尝试打开,如果您将其复制/粘贴到浏览器中,则应该下载。

1 个答案:

答案 0 :(得分:1)

在我的头撞到同一堵墙一段时间后,我使用卷曲方法(How to get the real URL after file_get_contents if redirection happens?)找到基本API网址重定向的位置,现在似乎正在运作!

而不是使用以下内容获取相同的错误消息:

file_get_contents(http://www.usaspending.gov/fpds/fpds.php?detail=c&fiscal_year=2013&state=AL&max_records=1000&records_from=0)

现在正在为我工​​作:

file_get_contents(http://www.usaspending.gov/api/fpds_api_complete.php?fiscal_year=2013&vendor_state=AL&Contracts=c&sortby=OBLIGATED_AMOUNT%2Bdesc&records_from=0&max_records=20&sortby=OBLIGATED_AMOUNT+desc)

因此,使用此作为我的基本URL来访问API时添加了更多参数(使用“Contracts”参数替换原始的“detail”参数):

http://www.usaspending.gov/api/fpds_api_complete.php?Contracts=c&sortby=OBLIGATED_AMOUNT%2Bdesc&sortby=OBLIGATED_AMOUNT+desc

我希望这会有所帮助,也适合你!