Skip to content

Instantly share code, notes, and snippets.

/PCCTDParser.pl Secret

Created December 11, 2013 09:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/7e09af31f5908da9e8c7 to your computer and use it in GitHub Desktop.
Save anonymous/7e09af31f5908da9e8c7 to your computer and use it in GitHub Desktop.
TodayPCC-gov 今日政府電子採購標案資料(搜尋)

今日政府電子採購標案資料(搜尋)

在Perl環境下,先使用windows console執行:

Perl PCCTDParser.pl http://web.pcc.gov.tw/pishtml/todaytender.html > DAT.js

再開啟index.html網頁。(總共會三個檔案會在同個目錄)

網頁使用的Javascript: 1.AngularJS (主要在搜尋功能) 2.JQuery (樣式功能)

<!DOCTYPE html>
<html ng-app>
<head>
<title>今日政府電子採購標案搜尋</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="http://code.angularjs.org/1.2.4/angular.min.js"></script>
<script src="DAT.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script>
</head>
<!--使用元件
1.AngularJS
2.JQuery
-->
<!-- 研究問題
1.使用table比較沒問題,但聽說未來的HTML將不再支持
2.使用div呈現Table,JQuery無法正確select元素,儘管宣告Class和ID
3.使用ul、li呈現,不支持百分比寬度和高度,改變瀏覽器視窗大小(手機瀏覽)可能發生排版紊亂問題
-->
<body>
<div style="font-size: 36px; text-align: center; font-weight: bold; margin-bottom:30px; ">今日政府電子採購標案資料</div>
<!--打字的地方-->
<span style="font-size:20px; ">搜尋標案:</span>
<input style="font-size:18px; width:50%; " placeholder="在這裡打字自動搜尋標案" type="text" ng-model="search" onkeyup="ABC()">
<div id="TDNow">今天是:</div>
<div style="text-align:right; "><a href="http://web.pcc.gov.tw/pishtml/todaytender.html" target="_blank">今日所有標案原始網頁</a></div>
<div style="text-align:right; "><a href="http://web.pcc.gov.tw/tps/pss/tender.do?method=goSearch&searchMode=common&searchType=basic" target="_blank">查詢過往公開標案</a></div>
<!--呈現資料的地方-->
<div ng-controller="tableData">
<table border="1" id="searchTextResults" width="100%" style="border-collapse: collapse; border-color: black;" border="1">
<!--表格欄位標題-->
<tr style="font-weight:bolder; ">
<td width="11%" style="text-align:center; ">標案分類</td>
<td width="25%" style="padding-left:10px; padding-right:10px; ">廠商</td>
<td width="50%" style="padding-left:10px; padding-right:10px; ">標案名稱</td>
<td width="6%" style="text-align:center; ">連結</td>
<td width="8%" style="text-align:center; ">截止投標日</td>
</tr>
<!--表格內容-->
<tr style="height:35px; " ng-repeat="fact in class | filter:search">
<td width="11%" style="text-align:center; ">{{fact.mch}}</td>
<td width="25%" style="padding-left:10px; padding-right:10px; ">{{fact.factor}}</td>
<td width="50%" style="padding-left:10px; padding-right:10px; ">{{fact.tname}}</td>
<td width="6%" style="text-align:center; "><a href="{{fact.rlink}}" target="_blank">點我</a></td>
<td width="8%" style="text-align:center; ">{{fact.edate}}</td>
</tr>
</table>
</div>
<!--表格結尾提示訊息-->
<div style="color:red; font-size:18px; ">原始標案資料網頁沒有「預算金額」資料,查詢時請注意「預算金額」以及「招標狀態是否為第一次」</div>
<!--其他的srcipt-->
<!--script1:網頁載入後將表格隔列上色-->
<script>
$(document).ready(function() {
$("tr:odd").delay(1500).css("background-color","#CCCCCC");
});
</script>
<!--script2:完成輸入並自動搜尋資料後,先將表格漂白再隔列上色-->
<script>
function ABC()
{
$("tr").css("background-color","#FFFFFF");
$("tr:odd").delay(1500).css("background-color","#CCCCCC");
}
</script>
<!--script3:顯示日期-->
<script>
var YY = new Date().getFullYear()-1911;
var MM = new Date().getMonth()+1;
var DD = new Date().getDate();
var WW = new Date().getDay();
var WC = ['日','一','二','三','四','五','六'];
$('#TDNow').text("今天是:民國" + YY + "年" + MM + "月" + DD + "日 星期" + WC[WW]);
</script>
</body>
</html>
#擷取資料:http://web.pcc.gov.tw/pishtml/todaytender.html
#其實是有想過要用For迴圈,但分類的資料內容不一樣,檔案結尾的文字處理,一時想不起來要怎麼寫好code
use LWP::Simple;
use utf8;
my $x="var tableData \= function\(\$scope\)\n\{\n\$scope\.class = \[\n";
print $x;
my $geData=get($ARGV[0]);
my $TT10=$geData;
#砍柴:公開招標
foreach ($TT10) {
#僅保留label_type1_0中的表格,其餘移除
s{.*label_type1_0"></a>}{}s;
s{label_type1_1.*}{}s;
s{.*</th>\s+</tr>\s+}{}s;
#檢查標案是否有符號字元,例如"(雙引號)必須轉成&quot;成為網頁顯示並非語法字元
s{\"}{\&quot\;}g;
#判斷是否無公告資料
if ($TT10 =~ /.*無公告資料.*/s){ last };
#將所有屬性標籤轉成json格式
s{<tr>\s+<td.*\s+.*black>}{ \{mch\: \'公開招標\', factor\: \'}g;
s{</font></td>\s+<td\s><font\scolor\=black>}{\', tname\: \'}g;
s{</font></td>\s+<td.*href\=\&quot\;}{\', rlink\: \'http\:\/\/web\.pcc\.gov\.tw}g;
s{\&quot\;.*</a></font></td>\s+<td.*black>}{\', edate\: \'}g;
s{</font></td>\s+</tr>\s+}{\'\},\n}g;
#移除行尾多餘字元
s{,\s<tr.*}{,\n}s;
print;
}
my $TT11=$geData;
#砍柴:限制性招標
foreach ($TT11) {
#僅保留label_type1_1中的表格,其餘移除
s{.*label_type1_1"></a>}{}s;
s{label_type1_2.*}{}s;
s{.*</th>\s+</tr>\s+}{}s;
#檢查標案是否有符號字元,例如"(雙引號)必須轉成&quot;成為網頁顯示並非語法字元
s{\"}{\&quot\;}g;
#判斷是否無公告資料
if ($TT11 =~ /.*無公告資料.*/s){ last };
#將所有屬性標籤轉成json格式
s{<tr>\s+<td.*\s+.*black>}{ \{mch\: \'限制性招標\', factor\: \'}g;
s{</font></td>\s+<td\s><font\scolor\=black>}{\', tname\: \'}g;
s{</font></td>\s+<td.*href\=\&quot\;}{\', rlink\: \'http\:\/\/web\.pcc\.gov\.tw}g;
s{\&quot\;.*</a></font></td>\s+<td.*black>}{\', edate\: \'}g;
s{</font></td>\s+</tr>\s+}{\'\},\n}g;
#移除行尾多餘字元
s{,\s<tr.*}{,\n}s;
print;
}
my $TT12=$geData;
#砍柴:選擇性招標(合格廠商)
foreach ($TT12) {
#僅保留label_type1_2中的表格,其餘移除
s{.*label_type1_2"></a>}{}s;
s{label_type1_3.*}{}s;
s{.*</th>\s+</tr>\s+}{}s;
#檢查標案是否有符號字元,例如"(雙引號)必須轉成&quot;成為網頁顯示並非語法字元
s{\"}{\&quot\;}g;
#判斷是否無公告資料
if ($TT12 =~ /.*無公告資料.*/s){ last };
#將所有屬性標籤轉成json格式
s{<tr>\s+<td.*\s+.*black>}{ \{mch\: \'選擇性招標1\', factor\: \'}g;
s{</font></td>\s+<td\s><font\scolor\=black>}{\', tname\: \'}g;
s{</font></td>\s+<td.*href\=\&quot\;}{\', rlink\: \'http\:\/\/web\.pcc\.gov\.tw}g;
s{\&quot\;.*</a></font></td>\s+<td.*black>}{\', edate\: \'}g;
s{</font></td>\s+</tr>\s+}{\'\},\n}g;
#移除行尾多餘字元
s{,\s<tr.*}{,\n}s;
print;
}
my $TT13=$geData;
#砍柴:選擇性招標(個案)
foreach ($TT13) {
#僅保留label_type1_3中的表格,其餘移除
s{.*label_type1_3"></a>}{}s;
s{label_type1_4.*}{}s;
s{.*</th>\s+</tr>\s+}{}s;
#檢查標案是否有符號字元,例如"(雙引號)必須轉成&quot;成為網頁顯示並非語法字元
s{\"}{\&quot\;}g;
#判斷是否無公告資料
if ($TT13 =~ /.*無公告資料.*/s){ last };
#將所有屬性標籤轉成json格式
s{<tr>\s+<td.*\s+.*black>}{ \{mch\: \'選擇性招標2\', factor\: \'}g;
s{</font></td>\s+<td\s><font\scolor\=black>}{\', tname\: \'}g;
s{</font></td>\s+<td.*href\=\&quot\;}{\', rlink\: \'http\:\/\/web\.pcc\.gov\.tw}g;
s{\&quot\;.*</a></font></td>\s+<td.*black>}{\', edate\: \'}g;
s{</font></td>\s+</tr>\s+}{\'\},\n}g;
#移除行尾多餘字元
s{,\s<tr.*}{,\n}s;
print;
}
my $TT14=$geData;
#砍柴:選擇性招標(後續邀標)
foreach ($TT14) {
#僅保留label_type1_4中的表格,其餘移除
s{.*label_type1_4"></a>}{}s;
s{label_type1_5.*}{}s;
s{.*</th>\s+</tr>\s+}{}s;
#檢查標案是否有符號字元,例如"(雙引號)必須轉成&quot;成為網頁顯示並非語法字元
s{\"}{\&quot\;}g;
#判斷是否無公告資料
if ($TT14 =~ /.*無公告資料.*/s){ last };
#將所有屬性標籤轉成json格式
s{<tr>\s+<td.*\s+.*black>}{ \{mch\: \'選擇性招標3\', factor\: \'}g;
s{</font></td>\s+<td\s><font\scolor\=black>}{\', tname\: \'}g;
s{</font></td>\s+<td.*href\=\&quot\;}{\', rlink\: \'http\:\/\/web\.pcc\.gov\.tw}g;
s{\&quot\;.*</a></font></td>\s+<td.*black>}{\', edate\: \'}g;
s{</font></td>\s+</tr>\s+}{\'\},\n}g;
#移除行尾多餘字元
s{,\s<tr.*}{,\n}s;
print;
}
my $TT15=$geData;
#砍柴:取得報價單、企劃書
foreach ($TT15) {
#僅保留label_type1_5中的表格,其餘移除
s{.*label_type1_5"></a>}{}s;
s{label_type2_0.*}{}s;
s{.*</th>\s+</tr>\s+}{}s;
#檢查標案是否有符號字元,例如"(雙引號)必須轉成&quot;成為網頁顯示並非語法字元
s{\"}{\&quot\;}g;
#判斷是否無公告資料
if ($TT15 =~ /.*無公告資料.*/s){ last };
#將所有屬性標籤轉成json格式
s{<tr>\s+<td.*\s+.*black>}{ \{mch\: \'報價單與企劃書\', factor\: \'}g;
s{</font></td>\s+<td\s><font\scolor\=black>}{\', tname\: \'}g;
s{</font></td>\s+<td.*href\=\&quot\;}{\', rlink\: \'http\:\/\/web\.pcc\.gov\.tw}g;
s{\&quot\;.*</a></font></td>\s+<td.*black>}{\', edate\: \'}g;
s{</font></td>\s+</tr>\s+}{\'\},\n}g;
#移除行尾多餘字元
s{,\s<tr.*}{,\n}s;
print;
}
my $TT20=$geData;
#砍柴:公開招標(更正)
foreach ($TT20) {
#僅保留label_type2_0中的表格,其餘移除
s{.*label_type2_0"></a>}{}s;
s{label_type2_1.*}{}s;
s{.*</th>\s+</tr>\s+}{}s;
#檢查標案是否有符號字元,例如"(雙引號)必須轉成&quot;成為網頁顯示並非語法字元
s{\"}{\&quot\;}g;
#判斷是否無公告資料
if ($TT20 =~ /.*無公告資料.*/s){ last };
#將所有屬性標籤轉成json格式
s{<tr>\s+<td.*\s+.*black>}{ \{mch\: \'(更正)公開招標\', factor\: \'}g;
s{</font></td>\s+<td\s><font\scolor\=black>}{\', tname\: \'}g;
s{</font></td>\s+<td.*href\=\&quot\;}{\', rlink\: \'http\:\/\/web\.pcc\.gov\.tw}g;
s{\&quot\;.*</a></font></td>\s+<td.*black>}{\', edate\: \'}g;
s{</font></td>\s+</tr>\s+}{\'\},\n}g;
#移除行尾多餘字元
s{,\s<tr.*}{,\n}s;
print;
}
my $TT21=$geData;
#砍柴:限制性招標(更正)
foreach ($TT21) {
#僅保留label_type2_1中的表格,其餘移除
s{.*label_type2_1"></a>}{}s;
s{label_type2_2.*}{}s;
s{.*</th>\s+</tr>\s+}{}s;
#檢查標案是否有符號字元,例如"(雙引號)必須轉成&quot;成為網頁顯示並非語法字元
s{\"}{\&quot\;}g;
#判斷是否無公告資料
if ($TT21 =~ /.*無公告資料.*/s){ last };
#將所有屬性標籤轉成json格式
s{<tr>\s+<td.*\s+.*black>}{ \{mch\: \'(更正)限制性招標\', factor\: \'}g;
s{</font></td>\s+<td\s><font\scolor\=black>}{\', tname\: \'}g;
s{</font></td>\s+<td.*href\=\&quot\;}{\', rlink\: \'http\:\/\/web\.pcc\.gov\.tw}g;
s{\&quot\;.*</a></font></td>\s+<td.*black>}{\', edate\: \'}g;
s{</font></td>\s+</tr>\s+}{\'\},\n}g;
#移除行尾多餘字元
s{,\s<tr.*}{,\n}s;
print;
}
my $TT22=$geData;
#砍柴:選擇性招標1(更正)
foreach ($TT22) {
#僅保留label_type2_2中的表格,其餘移除
s{.*label_type2_2"></a>}{}s;
s{label_type2_3.*}{}s;
s{.*</th>\s+</tr>\s+}{}s;
#檢查標案是否有符號字元,例如"(雙引號)必須轉成&quot;成為網頁顯示並非語法字元
s{\"}{\&quot\;}g;
#判斷是否無公告資料
if ($TT22 =~ /.*無公告資料.*/s){ last };
#將所有屬性標籤轉成json格式
s{<tr>\s+<td.*\s+.*black>}{ \{mch\: \'(更正)選擇性招標1\', factor\: \'}g;
s{</font></td>\s+<td\s><font\scolor\=black>}{\', tname\: \'}g;
s{</font></td>\s+<td.*href\=\&quot\;}{\', rlink\: \'http\:\/\/web\.pcc\.gov\.tw}g;
s{\&quot\;.*</a></font></td>\s+<td.*black>}{\', edate\: \'}g;
s{</font></td>\s+</tr>\s+}{\'\},\n}g;
#移除行尾多餘字元
s{,\s<tr.*}{,\n}s;
print;
}
my $TT23=$geData;
#砍柴:選擇性招標2(更正)
foreach ($TT23) {
#僅保留label_type2_3中的表格,其餘移除
s{.*label_type2_3"></a>}{}s;
s{label_type2_4.*}{}s;
s{.*</th>\s+</tr>\s+}{}s;
#檢查標案是否有符號字元,例如"(雙引號)必須轉成&quot;成為網頁顯示並非語法字元
s{\"}{\&quot\;}g;
#判斷是否無公告資料
if ($TT23 =~ /.*無公告資料.*/s){ last };
#將所有屬性標籤轉成json格式
s{<tr>\s+<td.*\s+.*black>}{ \{mch\: \'(更正)選擇性招標2\', factor\: \'}g;
s{</font></td>\s+<td\s><font\scolor\=black>}{\', tname\: \'}g;
s{</font></td>\s+<td.*href\=\&quot\;}{\', rlink\: \'http\:\/\/web\.pcc\.gov\.tw}g;
s{\&quot\;.*</a></font></td>\s+<td.*black>}{\', edate\: \'}g;
s{</font></td>\s+</tr>\s+}{\'\},\n}g;
#移除行尾多餘字元
s{,\s<tr.*}{,\n}s;
print;
}
my $TT24=$geData;
#砍柴:選擇性招標3(更正)
foreach ($TT24) {
#僅保留label_type2_4中的表格,其餘移除
s{.*label_type2_4"></a>}{}s;
s{label_type2_5.*}{}s;
s{.*</th>\s+</tr>\s+}{}s;
#檢查標案是否有符號字元,例如"(雙引號)必須轉成&quot;成為網頁顯示並非語法字元
s{\"}{\&quot\;}g;
#判斷是否無公告資料
if ($TT24 =~ /.*無公告資料.*/s){ last };
#將所有屬性標籤轉成json格式
s{<tr>\s+<td.*\s+.*black>}{ \{mch\: \'(更正)選擇性招標3\', factor\: \'}g;
s{</font></td>\s+<td\s><font\scolor\=black>}{\', tname\: \'}g;
s{</font></td>\s+<td.*href\=\&quot\;}{\', rlink\: \'http\:\/\/web\.pcc\.gov\.tw}g;
s{\&quot\;.*</a></font></td>\s+<td.*black>}{\', edate\: \'}g;
s{</font></td>\s+</tr>\s+}{\'\},\n}g;
#移除行尾多餘字元
s{,\s<tr.*}{,\n}s;
print;
}
my $TT25=$geData;
#砍柴:報價單與企劃書(更正)
foreach ($TT25) {
#僅保留label_type2_5中的表格,其餘移除
s{.*label_type2_5"></a>}{}s;
s{.*</th>\s+</tr>\s+}{}s;
#無後續表格,此程式碼移除並更改新增移除內容
s{</TABLE>.*}{AAAAAA}s;
#檢查標案是否有符號字元,例如"(雙引號)必須轉成&quot;成為網頁顯示並非語法字元
s{\"}{\&quot\;}g;
#判斷是否無公告資料
if ($TT25 =~ /.*無公告資料.*/s){ last };
#將所有屬性標籤轉成json格式
s{<tr>\s+<td.*\s+.*black>}{ \{mch\: \'(更正)報價單與企劃書\', factor\: \'}g;
s{</font></td>\s+<td\s><font\scolor\=black>}{\', tname\: \'}g;
s{</font></td>\s+<td.*href\=\&quot\;}{\', rlink\: \'http\:\/\/web\.pcc\.gov\.tw}g;
s{\&quot\;.*</a></font></td>\s+<td.*black>}{\', edate\: \'}g;
s{</font></td>\s+</tr>\s+}{\'\},\n}g;
#移除行尾多餘字元,唯獨此程式碼後面增加一個大誇號尾巴
s{'\},\sAAAAAA}{'\}\]\n\}}s;
print;
}
#其實最後面有一個小BUG(最後一項無公告資料時就會發生),這裡先暫時假設每天都會有資料
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment