Translate
部落客廣告
我的標籤
加入聯播訂閱
記事分類
nextstep的最新的記事
nextstep的最新的回應
Blog相關功能
Pagerank/ページランク

我的 部落格 價值
$47,421.36
你相信嗎?(哈哈~~)

看你的Blog值多少?
View blog authority
website counter
誰來我家
響應連結
一個都不能封 2k Bloggers
超完美掏空政府成員
原本只是一段平凡無奇的回應對話,引發一個『部落格民煮共和國』的產生,基於對現今政壇的風風雨雨,更激起『淘空政府』的概念,也引起一些『礙國』人士的關切,想知道源由嗎?請先從這裡看起!











RSS 訂閱
RSS2
ATOM
贊助商
其它資訊
本部落所刊登之內容,皆由作者個人所提供,不代表 yam天空部落 本身立場。
POWERED BY
POWERED BY
會員登入免費註冊
June 12, 2005

Nextstep  2005/06/12

有很多截取首頁新聞的程序,但是並不能成功。他們的工作原理無非兩種:一種是採用某些網站稱之為backend的後台資料庫,另一種則是硬聲聲的根據html代碼截取。

本程式採用的是後者,為我自己為要應用在每天定時動態擷取固定位址(別人的網站)的資料而撰寫的。

因Yahoo的對應網址與內容不同,及現行PHP的版本差異,補充了新的作法!


範例程式碼<?
  
//國泰世華匯率資料網頁
   $html_path = "http://tw.stock.yahoo.com/d/c/uwccb.html"; 
 
   if ($html_path) {
   $result = file_get_contents($html_path);
   highlight_string($result); // 顯示html
   } else {
   echo("<P>錯誤 : 無法開啟網站!</P>");
   exit();
   }

   eregi('<tr bgcolor="#ffffff"><td width="200" valign="TOP" >(.*)<p align ="center">以上資料來源:', $result, $temp); //設定過濾條件

   array($exchange_rate);

  //將所取得的 Html 資料作篩選,用空字串取代不用的 Html 標記!
   $exchange_rate[1] = str_replace('</td><td align="CENTER">', '', $temp[1]);
   $exchange_rate[1] = str_replace('<tr bgcolor="#ffffff"><td width="200" valign="TOP" >', '', $exchange_rate[1]);
   $exchange_rate[1] = str_replace('</table>', '', $exchange_rate[1]);
   $exchange_rate[1] = str_replace('</td>', '', $exchange_rate[1]);
   $exchange_rate[1] = str_replace('</tr>', '', $exchange_rate[1]);
   $exchange_rate[1] = str_replace('</center>', '', $exchange_rate[1]);
   $exchange_rate[1] = str_replace('</ br>', '', $exchange_rate[1]);
   $exchange_rate[1] = str_replace('  ', ' ', $exchange_rate[1]);

   $exchange_rate[1] = str_replace('大額美元 (USD)', 'USD',$exchange_rate[1]);
   $exchange_rate[1] = str_replace('小額美元 (USD)', 'USDs',$exchange_rate[1]);
   $exchange_rate[1] = str_replace('美元現鈔 ', 'USDc', $exchange_rate[1]);
   $exchange_rate[1] = str_replace('港幣 (HKD)', 'HKD', $exchange_rate[1]);
   $exchange_rate[1] = str_replace('港幣現鈔 ', 'HKDc', $exchange_rate[1]);
   $exchange_rate[1] = str_replace('英鎊 (GBP)', 'GBP', $exchange_rate[1]);
   $exchange_rate[1] = str_replace('瑞士法郎 (CHF)', 'CHF',$exchange_rate[1]);
   $exchange_rate[1] = str_replace('澳大利亞幣 (AUD)', 'AUD',$exchange_rate[1]);
   $exchange_rate[1] = str_replace('新加坡幣 (SGD)', 'SGD',$exchange_rate[1]);
   $exchange_rate[1] = str_replace('加拿大幣 (CAD)', 'CAD',$exchange_rate[1]);
   $exchange_rate[1] = str_replace('瑞典幣 (SEK)', 'SEK',$exchange_rate[1]);
   $exchange_rate[1] = str_replace('南非幣 (ZAR)', 'ZAR',$exchange_rate[1]);
   $exchange_rate[1] = str_replace('日圓 (JPY)', 'JPY',$exchange_rate[1]);
   $exchange_rate[1] = str_replace('日圓現鈔 ', 'JPYc',$exchange_rate[1]);
   $exchange_rate[1] = str_replace('丹麥幣 (DKK)', 'DKK',$exchange_rate[1]);
   $exchange_rate[1] = str_replace('泰國幣 (THB)', 'THB',$exchange_rate[1]);
   $exchange_rate[1] = str_replace('紐西蘭幣 (NZD)','NZD',$exchange_rate[1]);
   $exchange_rate[1] = str_replace('歐元 (EUR)', 'EUR',$exchange_rate[1]);
   $exchange_rate[1] = str_replace('歐元現鈔 ', 'EURc',$exchange_rate[1]);
   $exchange_rate[1] = str_replace('  ', '',$exchange_rate[1]);
 
   echo $exchange_rate[1]; //顯示擷取的結果

?>

以上這段程式碼因為Yahoo的對應網址與內容不同,及現行PHP的版本差異,所以作了以下的修正:

新的範例程式碼<?
   // 網址有變更!
   // 以 strstr() 函式指定起始點截取網頁(以html型式)內容,去掉前面不要的部份!
   // 截取內容應看實際的 html 原始碼!

   $result=strstr(file_get_contents("
http://tw.stock.yahoo.com/d/c/ex.php"), '(此匯率為前一日紐約匯市收盤價 )');

   // 用 strpos() 函式取得需要之區段之終點(應看實際的 html 原始碼)的位置!
   $r_end = strpos($result,"</table>");

  
// 本來想用 strip_tags() 來把 html 標記(html的語法)去掉,但換行符號一時無法解決,暫時不用!
   //
$result = strip_tags(substr($result,0,$r_end)); 
   // 有了終點位置,此時可以使用 substr() 作截取需要的資料區塊!

   $result = substr($result,0,$r_end);

   // 再次過濾,只取台幣為主的一行資料,再次使用 strstr()去掉前面不要的部份!
   $result = strstr($result, '<td bgcolor="#FFF0C1" align="center">台 幣</td>');
   $result = strstr($result, '</td>');

   //  再把 html 標記部份去掉,並資料與資料間以","來區隔!
   $result = substr($result,5,strpos($result,"</tr>"));
   $result = str_replace('<td align="right" bgcolor="#FFFFFF"><span class="tttt">',' ',$result);
   $result = str_replace('<td align="right" bgcolor="#FFFFFF"><font color="#FF3333"><b>',' ',$result);
   $result = str_replace('</span></td>',',',$result);
   $result = str_replace('</b></font></td>',',',$result);
   $result = str_replace('</tr>',' ',$result);
   $result = str_replace('</span>',' ',$result);

   //匯入資料至陣列$exchange中,資料以","作區隔辨識!
   $exchange = explode(',', $result);

   //顯示資料(把各個陣列值顯示出來,因為主要以台幣為主,省略台幤不顯示)
 //echo ("<br>台 幣 = ".(1/$exchange[1]));
   echo ("<br>美 金 = ".(1/$exchange[0]));
   echo ("<br>日 圓 = ".(1/$exchange[2]));
   echo ("<br>港 幣 = ".(1/$exchange[3]));
   echo ("<br>人民幣 = ".(1/$exchange[4]));
   echo ("<br>英 磅 = ".(1/$exchange[5]));
   echo ("<br>歐 元 = ".(1/$exchange[6]));
   echo ("<br>加 幣 = ".(1/$exchange[7]));
   echo ("<br>澳 元 = ".(1/$exchange[8]));
   echo ("<br>泰 銖 = ".(1/$exchange[9]));
?>


以上程式寫法其實毫無技巧可言,純粹為達目的的粗略作法,使用幾個簡單卻又很重要的字串處理函式,讓初學者可以以淺顯的方式學習一些實用的作法!
My Tags!
Add to bookmarks!Add this page to del.icio.us Add this page to Furl Add this page to Yahoo Taiwan's bookmark Add this page to Reddit Bookmarks Add this page to Ask Bookmarks Add this page to Hemidemi Add this page to MyShare Add this page to Blogmarks Bookmarks Add this page to Digg Bookmarks
引用 (你可以針對此文寫一篇屬於自己的blog/想法,並給作者一個通告)
引用
相關閱讀
留言 (0筆)
發表你的留言 (字數限制 最多 2000 個中文字)
私密留言:
Name:






內容: