如何向.do页面提交查询

时间:2013-12-17 11:02:02

标签: javascript database dojo download automation

这是我第一次参加stackexchange,面临一个问题,我无法在Google上花费数小时的时间找到解决方案。由于缺乏更多图像而提前道歉,stackexchange不允许我在我的声誉更高之前拍摄更多照片。

我需要从.do页面获得结果:

http://webapps2.rrc.state.tx.us/EWA/productionQueryAction.do

当大型查询例如

时,网址仍然是静态的

http://i.stack.imgur.com/eYrkA.png

已提交 - 我无法通过更改网址来更改我的查询。

提交后,需要很长时间才能加载,加载后会显示一个结果表。

然后,我要求所有数据都在一个页面上,所以我从表格左上角的下拉菜单中选择“查看全部”作为页面大小,以获取以下页面(其中包含的行数多于显示的数量)这里)

http://i.stack.imgur.com/SCCi6.png

最后,为了导入这些数据,我打开一个电子表格并将其全部复制粘贴。

即使对于一个县/查询/提交,这个过程也非常繁琐,我必须每月为大约20个县,然后是另外10个区做这个。由于与每个查询返回相关的加载时间较长,因此这项任务很容易需要2-3个小时才能完成。

因此,我希望有人在这里有某种解决方案来自动化/简化流程,甚至只是建议我在哪里可以找到自己创建解决方案的信息。如果我可以直接查询数据库将数据导入电子表格,我的问题就会解决。如果查询服务器的整个过程可以自动化,加载时间是无关紧要的,因为它可以在没有用户输入的情况下在后台运行。

我为这个漫长而非具体的问题道歉,我们将非常感谢任何回复。

非常感谢。

2 个答案:

答案 0 :(得分:1)

好吧,您实际上可以检查执行的网络调用以获取CSV文件。我刚刚为你做了这个,但它包含了你需要发送的很多参数。以下是你需要发送的实际参数:

searchArgs.orderByColumnName=
&searchArgs.initialViewArgHndlr.inputValue=County
&searchArgs.startMonthArgHndlr.inputValue=01
&searchArgs.startYearArgHndlr.inputValue=1993
&searchArgs.endMonthArgHndlr.inputValue=01
&searchArgs.endYearArgHndlr.inputValue=2013
&searchArgs.oilOrGasArgHndlr.inputValue=
&searchArgs.gasWellNoHndlr.inputValue=
&searchArgs.searchTypeHndlr.inputValue=production
&searchArgs.viewTypeHndlr.inputValue=monthlyTotals
&searchArgs.activeTabsFlagwordHndlr.inputValue=11
&searchArgs.orderByHndlr.inputValue=
&searchArgs.leaseTypeArgHndlr.inputValue=O
&searchArgs.districtCodeArgHndlr.inputValue=
&searchArgs.leaseNumberArgHndlr.inputValue=
&searchArgs.fieldNumbersArgHndlr.inputValue=
&searchArgs.fieldNamesHndlr.inputValue=
&searchArgs.operatorNumbersArgHndlr.inputValue=
&searchArgs.operatorNamesHndlr.inputValue=
&searchArgs.onShoreCountyCodeArgHndlr.inputValue=001
&searchArgs.offShoreCountyCodeArgHndlr.inputValue=
&searchArgs.leaseNameArgHndlr.inputValue=
&searchArgs.geoRegionOptionHndlr.inputValue=county
&searchArgs.statewideFlagHndlr.inputValue=
&methodToCall=generateProductionQueryReportCsv
&actionManager.recordCountHndlr.inputValue=2
&actionManager.currentIndexHndlr.inputValue=1
&actionManager.actionRcrd%5B0%5D.actionDisplayNmHndlr.inputValue=Search+Criteria
&actionManager.actionRcrd%5B0%5D.hostHndlr.inputValue=webapps2.rrc.state.tx.us%3A80
&actionManager.actionRcrd%5B0%5D.contextPathHndlr.inputValue=%2FEWA
&actionManager.actionRcrd%5B0%5D.actionHndlr.inputValue=%2FproductionQueryAction.do
&actionManager.actionRcrd%5B0%5D.actionParameterHndlr.inputValue=methodToCall
&actionManager.actionRcrd%5B0%5D.actionMethodHndlr.inputValue=unspecified
&actionManager.actionRcrd%5B0%5D.pagerParameterKeyHndlr.inputValue=
&actionManager.actionRcrd%5B0%5D.actionParametersHndlr.inputValue=
&actionManager.actionRcrd%5B0%5D.returnIndexHndlr.inputValue=0
&actionManager.actionRcrd%5B0%5D.argRcrdParameters%28searchArgs.paramValue%29=%7C1%3DCounty%7C2%3D01%7C3%3D1993%7C4%3D01%7C5%3D2013%7C8%3Dproduction%7C9%3DmonthlyTotals%7C10%3D11%7C101%3DO%7C201%3D001%7C204%3Dcounty
&actionManager.actionRcrd%5B1%5D.actionDisplayNmHndlr.inputValue=County%3A+ANDERSON
&actionManager.actionRcrd%5B1%5D.hostHndlr.inputValue=webapps2.rrc.state.tx.us%3A80
&actionManager.actionRcrd%5B1%5D.contextPathHndlr.inputValue=%2FEWA
&actionManager.actionRcrd%5B1%5D.actionHndlr.inputValue=%2FproductionQueryAction.do
&actionManager.actionRcrd%5B1%5D.actionParameterHndlr.inputValue=methodToCall
&actionManager.actionRcrd%5B1%5D.actionMethodHndlr.inputValue=search
&actionManager.actionRcrd%5B1%5D.pagerParameterKeyHndlr.inputValue=prodPager.paramValue
&actionManager.actionRcrd%5B1%5D.actionParametersHndlr.inputValue=
&actionManager.actionRcrd%5B1%5D.returnIndexHndlr.inputValue=0
&actionManager.actionRcrd%5B1%5D.argRcrdParameters%28prodPager.paramValue%29=%7C1%3D1%7C2%3D-1%7C3%3D241%7C4%3D0%7C5%3D0%7C6%3D10
&actionManager.actionRcrd%5B1%5D.argRcrdParameters%28searchArgs.paramValue%29=%7C1%3DCounty%7C2%3D01%7C3%3D1993%7C4%3D01%7C5%3D2013%7C8%3Dproduction%7C9%3DmonthlyTotals%7C10%3D11%7C101%3DO%7C201%3D001%7C204%3Dcounty
&searchArgs.startMonthArg=01
&searchArgs.startYearArg=1993
&searchArgs.endMonthArg=01
&searchArgs.endYearArg=2013
&pager.pageSize=-1

我希望你只有前缀为searchArgs的参数很重要(它们包含表格的信息,比如月/年/....

actionManager前缀参数包含一些复杂的数据,你需要定义它们(否则你会收到错误),但我不知道它们是否真的被使用过,所以你可能只是将它们留空。

执行此调用时,您将立即收到CSV文件,您可以使用任何语言解析该文件(查找CSV解析库)并将其插入数据库或其他内容。


但是,最好的方法是寻找这个源的替代品(或者你可以访问的公共API),因为这真的很疯狂,而且可能会改变。


使用PHP的示例

以下代码是PHP检索CSV(使用cURL)并将其解析为数组的示例。

<?php

/** The data */
$minMonth = '01';
$minYear = '1993';
$maxMonth = '01';
$maxYear = '2013';
$view = 'County';
$region = 'county';
$location = '001'; /** This is the county code of ANDERSON */

$ch = curl_init();
/** URL */
curl_setopt($ch, CURLOPT_URL, "http://webapps2.rrc.state.tx.us/EWA/productionQueryAction.do");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);

/** All these form parameters */
$data = array(
    'searchArgs.orderByColumnName' => '',
    'searchArgs.initialViewArgHndlr.inputValue' => $view,
    'searchArgs.startMonthArgHndlr.inputValue' => $minMonth,
    'searchArgs.startYearArgHndlr.inputValue' => $minYear,
    'searchArgs.endMonthArgHndlr.inputValue' => $maxMonth,
    'searchArgs.endYearArgHndlr.inputValue' => $maxYear,
    'searchArgs.oilOrGasArgHndlr.inputValue' => '',
    'searchArgs.gasWellNoHndlr.inputValue' => '',
    'searchArgs.searchTypeHndlr.inputValue' => 'production',
    'searchArgs.viewTypeHndlr.inputValue' => 'monthlyTotals',
    'searchArgs.activeTabsFlagwordHndlr.inputValue' => '11',
    'searchArgs.orderByHndlr.inputValue' => '',
    'searchArgs.leaseTypeArgHndlr.inputValue' => 'O',
    'searchArgs.districtCodeArgHndlr.inputValue' => '',
    'searchArgs.leaseNumberArgHndlr.inputValue' => '',
    'searchArgs.fieldNumbersArgHndlr.inputValue' => '',
    'searchArgs.fieldNamesHndlr.inputValue' => '',
    'searchArgs.operatorNumbersArgHndlr.inputValue' => '',
    'searchArgs.operatorNamesHndlr.inputValue' => '',
    'searchArgs.onShoreCountyCodeArgHndlr.inputValue' => $location,
    'searchArgs.offShoreCountyCodeArgHndlr.inputValue' => '',
    'searchArgs.leaseNameArgHndlr.inputValue' => '',
    'searchArgs.geoRegionOptionHndlr.inputValue' => $region,
    'searchArgs.statewideFlagHndlr.inputValue' => '',
    'methodToCall' => 'generateProductionQueryReportCsv',
    'actionManager.recordCountHndlr.inputValue' => '2',
    'actionManager.currentIndexHndlr.inputValue' => '1',
    'actionManager.actionRcrd%5B0%5D.actionDisplayNmHndlr.inputValue' => 'Search+Criteria',
    'actionManager.actionRcrd%5B0%5D.hostHndlr.inputValue' => 'webapps2.rrc.state.tx.us%3A80',
    'actionManager.actionRcrd%5B0%5D.contextPathHndlr.inputValue' => '%2FEWA',
    'actionManager.actionRcrd%5B0%5D.actionHndlr.inputValue' => '%2FproductionQueryAction.do',
    'actionManager.actionRcrd%5B0%5D.actionParameterHndlr.inputValue' => 'methodToCall',
    'actionManager.actionRcrd%5B0%5D.actionMethodHndlr.inputValue' => 'unspecified',
    'actionManager.actionRcrd%5B0%5D.pagerParameterKeyHndlr.inputValue' => '',
    'actionManager.actionRcrd%5B0%5D.actionParametersHndlr.inputValue' => '',
    'actionManager.actionRcrd%5B0%5D.returnIndexHndlr.inputValue' => '0',
    'actionManager.actionRcrd%5B0%5D.argRcrdParameters%28searchArgs.paramValue%29' => '%7C1%3DCounty%7C2%3D01%7C3%3D1993%7C4%3D01%7C5%3D2013%7C8%3Dproduction%7C9%3DmonthlyTotals%7C10%3D11%7C101%3DO%7C201%3D001%7C204%3Dcounty',
    'actionManager.actionRcrd%5B1%5D.actionDisplayNmHndlr.inputValue' => 'County%3A+ANDERSON',
    'actionManager.actionRcrd%5B1%5D.hostHndlr.inputValue' => 'webapps2.rrc.state.tx.us%3A80',
    'actionManager.actionRcrd%5B1%5D.contextPathHndlr.inputValue' => '%2FEWA',
    'actionManager.actionRcrd%5B1%5D.actionHndlr.inputValue' => '%2FproductionQueryAction.do',
    'actionManager.actionRcrd%5B1%5D.actionParameterHndlr.inputValue' => 'methodToCall',
    'actionManager.actionRcrd%5B1%5D.actionMethodHndlr.inputValue' => 'search',
    'actionManager.actionRcrd%5B1%5D.pagerParameterKeyHndlr.inputValue' => 'prodPager.paramValue',
    'actionManager.actionRcrd%5B1%5D.actionParametersHndlr.inputValue' => '',
    'actionManager.actionRcrd%5B1%5D.returnIndexHndlr.inputValue' => '0',
    'actionManager.actionRcrd%5B1%5D.argRcrdParameters%28prodPager.paramValue%29' => '%7C1%3D1%7C2%3D-1%7C3%3D241%7C4%3D0%7C5%3D0%7C6%3D10',
    'actionManager.actionRcrd%5B1%5D.argRcrdParameters%28searchArgs.paramValue%29' => '%7C1%3DCounty%7C2%3D01%7C3%3D1993%7C4%3D01%7C5%3D2013%7C8%3Dproduction%7C9%3DmonthlyTotals%7C10%3D11%7C101%3DO%7C201%3D001%7C204%3Dcounty',
    'searchArgs.startMonthArg' => $minMonth,
    'searchArgs.startYearArg' => $minYear,
    'searchArgs.endMonthArg' => $maxMonth,
    'searchArgs.endYearArg' => $maxYear,
    'pager.pageSize' => '-1'
);

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);

/** Convert CSV string to array */
$data = str_getcsv($output);

/** Print array */
print_r($data);

?>

答案 1 :(得分:0)

根据您的描述,这听起来像是数据库花时间生成结果的问题。

如果是这种情况,您知道是否有数据库被查询?

如果您在多个链接表中查询数据(它看起来和听起来像你一样),没有任何索引,那么查询将像狗一样运行。

This网站对可能值得一看的索引提供了很好的介绍。

除此之外,设置一个cron来为你自动化过程可能很普遍,就像评论中描述的Anusha一样。

我建议查看索引以及设置cron作业,而不是仅减少每月生成数据所需的时间,您可以完全自动化它,并使其运行几分钟,而不是每个月的几个小时。