發佈日期:
分類:
如何使用PHP‧取得網上網頁中內容
現在的IT工作,其實與做雜工是沒有分別的,每天都是一堆與IT無關的事情。而這次,就是每天需要寄出給各位同事的外幣對換表。這些對換表,其實在每間銀行也會容易找到,但人就是這樣,明明是抄人的東西,卻硬要包裝成自己做的一樣。
01. 而今次要求的,就是發出去的電郵內容,與下面的差不多。
02. 而借來參考的銀行網站,就是香港的DBS的外幣對換表。
03. 看一看DBS的內容,其實所有的資料已經有齊,只是有些不用的貨幣需要刪除。其中一個做法,當然是每天左手抄右手,跟著表格來改價位。但對於一向懶慣的我,我情願花少少時間在程式碼上面。
04. 先把DBS網頁的內容的原程式碼倒出來,會看到的是一堆的HTML字,問題是要怎樣分析其內容。
05. 把內容全複製到NOTEPAD++內,尋找第一隻貨幣AUD。會看到其結構是使用了HTML TABLE中的TR及TD方式。
06. 初步知道了結構,就可以開始程式碼的工作,而今次繼續使用PHP,去解決問題。
07. 解釋一下程式碼內容,第一個工作,是使用file_get_contents函數,取得DBS的外幣表格內容。
$content = file_get_contents ("https://hk.dbs.com/ecPortalWeb/Rates/ExchangeRate.AXD?nls=en-us");
08. 之後會根據需要的貨幣資料,執行看訂的rates函數,取得有關資料,並儲存在陣列(Array)內。
$res[0] = rates(strpos($content, "AUD"), $content);
09. rates函數,就是根據DBS網頁的內容的原程式碼,取回相關資料。
function rates($val, $content) { $p1 = strpos($content, "<td", $val+8); $p2 = strpos($content, "</td>", $p1); $p3 = strpos($content, "<td", $p2); $p4 = strpos($content, "</td>", $p3); $p5 = strpos($content, "<td", $p4); $p6 = strpos($content, "</td>", $p5); $p7 = strpos($content, "<td", $p6); $p8 = strpos($content, "</td>", $p7); $r[0] = substr($content, $val, 3); $offset1 = strpos($content, ">", $p1)-$p1+1; $offset2 = strpos($content, ">", $p3)-$p3+1; $offset3 = strpos($content, ">", $p5)-$p5+1; $offset4 = strpos($content, ">", $p7)-$p7+1; $r[1] = substr($content, $p1+$offset1, $p2-$p1-$offset1); $r[2] = substr($content, $p3+$offset2, $p4-$p3-$offset2); $r[3] = substr($content, $p5+$offset3, $p6-$p5-$offset3); $r[4] = substr($content, $p7+$offset4, $p8-$p7-$offset4); return $r; }
10. 最後就是把內容,用要求的方式展示出來。
$update = substr($content, strpos($content, "Last updated")+strlen("Last updated "), 10); $eng_update = date_change($update); echo '<table style="font-family: arial; font-size: 11pt; border: 1px solid black; border-collapse:collapse;">'; echo '<tr>'; echo '<td></td>'; echo '<td style="padding: 5px; border: 1px solid black; width: 140px">Current day</td>'; echo '<td style="padding: 5px; border: 1px solid black; width: 140px">Current day</td>'; echo '</tr>'; echo '<tr>'; echo '<td></td>'; echo '<td style="padding: 5px; border: 1px solid black; width: 140px">'.$eng_update.'</td>'; echo '<td style="padding: 5px; border: 1px solid black; width: 140px">'.$eng_update.'</td>'; echo '</tr>'; echo '<tr>'; echo '<td></td>'; echo '<td style="padding: 5px; border: 1px solid black; width: 140px">Against HKD</td>'; echo '<td style="padding: 5px; border: 1px solid black; width: 140px">Against HKD</td>'; echo '</tr>'; echo '<tr>'; echo '<td></td>'; echo '<td style="padding: 5px; border: 1px solid black; width: 140px">Sell to Bank</td>'; echo '<td style="padding: 5px; border: 1px solid black; width: 140px">Buy from Bank</td>'; echo '</tr>'; for ($i=0; $i<=9; $i++) { echo '<tr>'; echo '<td style="padding: 5px; border: 1px solid black; width: 70px">'.$res[$i][0].'</td>'; for ($j=1; $j<=2; $j++) { echo '<td style="padding: 5px; border: 1px solid black; width: 140px">'; echo $res[$i][$j]; echo '</td>'; } } echo '</table>'; echo '<br>'; echo '<table style="font-family: arial; font-size: 11pt; border: 1px solid black; border-collapse:collapse;">'; echo '<tr>'; echo '<td></td>'; echo '<td style="padding: 5px; border: 1px solid black; width: 140px">Current day</td>'; echo '<td style="padding: 5px; border: 1px solid black; width: 140px">Current day</td>'; echo '</tr>'; echo '<tr>'; echo '<td></td>'; echo '<td style="padding: 5px; border: 1px solid black; width: 140px">'.$eng_update.'</td>'; echo '<td style="padding: 5px; border: 1px solid black; width: 140px">'.$eng_update.'</td>'; echo '</tr>'; echo '<tr>'; echo '<td></td>'; echo '<td style="padding: 5px; border: 1px solid black; width: 140px">Against USD</td>'; echo '<td style="padding: 5px; border: 1px solid black; width: 140px">Against USD</td>'; echo '</tr>'; echo '<tr>'; echo '<td></td>'; echo '<td style="padding: 5px; border: 1px solid black; width: 140px">Sell to Bank</td>'; echo '<td style="padding: 5px; border: 1px solid black; width: 140px">Buy from Bank</td>'; echo '</tr>'; for ($i=0; $i<=9; $i++) { echo '<tr>'; echo '<td style="padding: 5px; border: 1px solid black; width: 70px">'.$res[$i][0].'</td>'; for ($j=3; $j<=4; $j++) { echo '<td style="padding: 5px; border: 1px solid black; width: 140px">'; echo $res[$i][$j]; echo '</td>'; } } echo '</table>';
11. 把檔案上載至Apache伺服器,用瀏覽器打開,便會看到以下的結果。
12. 需要時,只要把內容複製到電郵,便完成今次的工作。當然您會問,可不可以連發電郵的工作也自動化呢?這個當然是沒問題的,只要利用PHPMailer工具,其實可以輕易達到目的。但大前題是,有誰可保證,借回來的DBS外幣對換表內容不會更改呢?所以,某程度上每天的一點點檢查是有必要的。
發佈留言