腦友記廣場 -> 新手上路 -> 剖析 (制作報紙三步曲之二) 文匯報 登錄 -> 註冊 -> 回復主題 -> 發表主題

maninnet 2006-06-09 23:48
第二部為制作各項目的標題, wenwei.php

<html><head><title>WenWeiDaily</title></head>
<body>
文匯報網上版<hr>
<?
$catList=$_GET['catList'];
$cat=$_GET['cat'];
$baseurl = "http://www.wenweipo.com/";
$requesturl = "http://www.wenweipo.com/$catList.phtml?cat=$cat";
if ($fp = fopen("$requesturl", "r"))
{
  while(!feof($fp))
  {
    $line = fgets($fp,1024);
    if (eregi("dot-diamond-",$line))
    {
    $outtext = $outtext.$line;
    }
  }
  fclose($fp);
}
$outtext = eregi_replace("<img","<li><img",$outtext);
$allowed_tags = "<a>,<li>";
$outtext = strip_tags($outtext, $allowed_tags);
$outtext = eregi_replace("target=\"_blank\"","",$outtext);
$outtext = eregi_replace("class=\"cat02\"","",$outtext);
$outtext = eregi_replace("</a>","</a><br>\n",$outtext);
$outtext = eregi_replace("news.phtml","wenview.php",$outtext);
echo($outtext);
?>
<hr>
WenWei 1.0 Coded by ManInNet
</body></html>

解說:

$catList=$_GET['catList'];
$cat=$_GET['cat'];

為讀說 wenwei.html 所傳來的參數
以要聞來說, wenwei.php?catList=catList-i&cat=001YO
$catList 變數的值, 則為 catList-i
$cat 的值為 001YO

我們要讀取的 url 就放於 $requesturl

$requesturl = "http://www.wenweipo.com/$catList.phtml?cat=$cat";

以要聞來說, 就是 http://www.wenweipo.com/catList-i.phtml?cat=001YO

用 fopen 及 fgets 一行一行讀取網頁內容, 放在 $line 中已是常例.

if ($fp = fopen("$requesturl", "r"))
{
  while(!feof($fp))
  {
    $line = fgets($fp,1024);
    if (eregi("dot-diamond-",$line))
    {
    $outtext = $outtext.$line;
    }
  }
  fclose($fp);
}

我們要求的是標題, 跟 link, 其他內容就捨棄, 於是, 剖析了有關網頁內容, 有一個特點, 就是每一標題前都有一個圖示, 檔案前幾個字元為: dot-diamond-

所以每行檢查是否有 dot-diamond-, 有的, 才放在 $outtext 中. 當整個檔案讀取完畢, $outtext 就是我們所要的內容.

在 <img 之前加上 <li>, 我用 html 的點 <li> 替代圖作標題間隔:
$outtext = eregi_replace("<img","<li><img",$outtext);

除連結及點外, 刪去所有 html 中的 tag, 包括圖片, 只保留連結及標題間隔的點:
$allowed_tags = "<a>,<li>";
$outtext = strip_tags($outtext, $allowed_tags);

刪除連結開空白及無謂的 class:
$outtext = eregi_replace("target=\"_blank\"","",$outtext);
$outtext = eregi_replace("class=\"cat02\"","",$outtext);

隔行:
$outtext = eregi_replace("</a>","</a><br>\n",$outtext);

原網頁 link 到 news.phtml 中, 我們則要修改, 改為 link 將制作的 wenview.php 去:
$outtext = eregi_replace("news.phtml","wenview.php",$outtext);

完成, 並顯示:
echo($outtext);

zozzen 2008-02-17 16:20
請教一下網兄, 在新版中,
$outtext 出現以下的一句:

$outtext = eregi_replace("http://paper.wenweipo.com/([0-9]){4}/([0-9]){2}/([0-9]){2}/","wenview.php?news_id=",$outtext);

請問 (0-9) {4} 那類符號是代表甚麼呢?

其實呢排接觸 php 時, 經常都遇到好多怪符號, 例如 ! ,   .   , \   , {} 之類,
查 PHP Manual 時都唔識從何搵起 (諗唔到用乜 key word 去 search)
請各位高手指點下迷津啦. 謝謝

maninnet 2008-02-17 19:43
0-9 是表示 0,1,2,3,4,5...9
同樣可以用 "a"-"z" 表示 "a", "b","c"...."z"
"A"-"Z" 表示 "A","B","C"...."Z"
小括號內是表示選擇內容, (0-9) 表示只接受 0-9 的符號
大括號{} 是表示字元數目, {4} 是 4 個. {0,4} 表示 0-4 個.
詳細定義, 可以在 google 內用 regular expression php 搜尋

zozzen 2008-02-17 21:21
明白了~~ 謝謝!

sitepoint 有篇文章幾詳細介紹 regular expression, 大家有空都黎睇下啦~~
http://www.sitepoint.com/article/regular-expressions-php


查看完整版本: [-- 剖析 (制作報紙三步曲之二) 文匯報 --] [-- top --]


Powered by PHPWind v4.0.1 Code © 2003-05 PHPWind
Gzip enabled

You can contact us