[分享]入口增加天氣預告

phpBB Plus Support
本區是討論關於 phpBB 2 plus 使用上的問題討論!
(發表文章請按照公告格式發表,違者砍文)

版主: 版主管理群

主題已鎖定
gouer
星球普通子民
星球普通子民
文章: 14
註冊時間: 2007-07-26 12:54
來自: 台灣

[分享]入口增加天氣預告

文章 gouer » 2007-08-04 12:02

此功能應該可以寫的更簡潔或更方便
但對一般站長而言應該很夠用了
第一次發表如有觸犯版規尚祈見諒
若有使用上的問題請留言,謝謝!
這是完成的模樣:
圖檔

我的站台安裝環境
Linux kernel 2.4.20
Apache 1.3.37
PHP 4.4.6
phpbbplus 1.53a UTF-8

代碼: 選擇全部

# 
#-----[ OPEN 打開 ]------------------------------------------------ 
#

portal.php

# 
#-----[ FIND 尋找 ]------------------------------------------------ 
#

//
// Recent Topics
//

# 
#-----[ BEFORE, ADD 之前, 加上 ]------------------------------------ 
#

// Begin Weather Mod
$weather_url = "http://www.cwb.gov.tw/V5/forecast/taiwan/week.htm";
$area = array ("north", "middle", "south");
$north_contents = iconv("utf-8", "big5", "苗栗(.*)中部");
$middle_contents = iconv("utf-8", "big5", "嘉義(.*)台南");
$south_contents = iconv("utf-8", "big5", "屏東(.*)東北部");
$today_contents = iconv("utf-8", "big5", "第一直(.*)星期日");
$split_value = array (
	"a" => "<td align=center valign=middle>",
	"b" => "</td>",
	"c" => "<BR>",
	"d" => "<th align=center width=60 bgcolor=#f5f5f5>"
	);

$fcontents = file_get_contents($weather_url);
for ($i = 0; $i <= count($area); $i++)
{
        switch ($area[$i])
        {
                case "north" :
                        eregi($north_contents, $fcontents, $regs);
                        $north_split = explode("\n", $regs[1]);
                        $north_value = $north_split[1];
                        break;
                case "middle" :
                        eregi($middle_contents, $fcontents, $regs);
                        $middle_split = explode("\n", $regs[1]);
                        $middle_value = $middle_split[1];
                        break;
                case "south" :
                        eregi($south_contents, $fcontents, $regs);
                        $south_split = explode("\n", $regs[1]);
                        $south_value = $south_split[1];
                        break;
		case "today" :
                        eregi($today_contents, $fcontents, $regs);
                        $today_split = explode("\n", $regs[1]);
                        $today_value = $today_split[2];
                        break;
        }
}

for ($i = 0; $i <= count($split_value); $i++)
{
        switch ($i)
        {
                case 0:
                        $north_value = str_replace($split_value['a'], "", $north_value);
                        $north_value = str_replace($split_value['b'], "", $north_value);
                        $north_value = str_replace("<img src=\"", "<img src=\"http://www.cwb.gov.tw/", $north_value);
                        $res = explode($split_value['c'], $north_value);
                        $north_weather = iconv("big5", "utf-8", $res[0]);
                        $north_temperature = iconv("big5", "utf-8", $res[1]);
                        break;
                case 1:
                        $middle_value = str_replace($split_value['a'], "", $middle_value);
                        $middle_value = str_replace($split_value['b'], "", $middle_value);
                        $middle_value = str_replace("<img src=\"", "<img src=\"http://www.cwb.gov.tw/", $middle_value);
                        $res = explode($split_value['c'], $middle_value);
                        $middle_weather = iconv("big5", "utf-8", $res[0]);
                        $middle_temperature = iconv("big5", "utf-8", $res[1]);
                        break;
                case 2:
                        $south_value = str_replace($split_value['a'], "", $south_value);
                        $south_value = str_replace($split_value['b'], "", $south_value);
                        $south_value = str_replace("<img src=\"", "<img src=\"http://www.cwb.gov.tw/", $south_value);
                        $res = explode($split_value['c'], $south_value);
                        $south_weather = iconv("big5", "utf-8", $res[0]);
                        $south_temperature = iconv("big5", "utf-8", $res[1]);
                        break;
		 case 3:
                        $today_value = str_replace($split_value['d'], "", $today_value);
                        $res = explode($split_value['c'], $today_value);
                        $today_date = iconv("big5", "utf-8", $res[0]);
                        break;
        }
}

// End Weather Mod

# 
#-----[ FIND 尋找 ]------------------------------------------------ 
#

        'L_POSTED' => $lang['Posted'],
        // End add - Photo Album Block

# 
#-----[ AFTER, ADD 之後, 加上 ]------------------------------------ 
#

        // Begin Weather Mod
        'NORTH_WEATHER' => $north_weather,
        'NORTH_TEMPERATURE' => $north_temperature,
        'MIDDLE_WEATHER' => $middle_weather,
        'MIDDLE_TEMPERATURE' => $middle_temperature,
        'SOUTH_WEATHER' => $south_weather,
        'SOUTH_TEMPERATURE' => $south_temperature,
	'TODAY_DATE' => $today_date,
        // End Weather Mod

# 
#-----[ OPEN 打開 ]------------------------------------------------ 
#

portal_body.tpl

# 
#-----[ FIND 尋找 ]------------------------------------------------ 
#

<!-- END switch_none_recentfiles -->

# 
#-----[ AFTER, ADD 之後, 加上 ]------------------------------------ 
#

<!-- Begin Weather Mod-->
<table width="100%" cellpadding="3" cellspacing="1" border="0" class="forumline">
<tr>
<th colspan="3">{TODAY_DATE} 天氣預報</th>
</tr>
<tr>
<td class="row1" colspan="3" align="center">
<a href=http://news.pchome.com.tw/weather/cwb_data/s3p.jpg target="_new"><img src="http://news.pchome.com.tw/weather/cwb_data/s3p.jpg" width="120" height="132" board="0"></a>
</td>
</tr>
<tr>
<td class="row1" align="center">
<span class="gensmall">北部<br />
{NORTH_WEATHER}<br/>
{NORTH_TEMPERATURE}
</td>
<td class="row1" align="center">
<span class="gensmall">中部<br />
{MIDDLE_WEATHER}<br/>
{MIDDLE_TEMPERATURE}
</td>
<td class="row1" align="center">
<span class="gensmall">南部<br />
{SOUTH_WEATHER}<br/>
{SOUTH_TEMPERATURE}
</td>
</tr>
<tr>
<td class="row1" colspan="3" align="center">
<span class="gensmall">
<a href=http://www.cwb.gov.tw/V5/forecast/taiwan/week.htm target=_new>台灣各地1週天氣預報</a>
</td>
</tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" class="tbl"><tr><td class="tbll"><img src="images/spacer.gif" alt="" width="8" height="4" /></td><td class="tblbot"><img src="images/spacer.gif" alt="" width="8" height="4" /></td><td class="tblr"><img src="images/spacer.gif" alt="" width="8" height="4" /></td></tr></table>
<br />
<!-- End Weather Mod-->

# 
#-----[ SAVE/CLOSE ALL FILES 儲存/關閉所有檔案 ]------------------- 
# 
# EoM

MeowJohn
星球普通子民
星球普通子民
文章: 13
註冊時間: 2007-02-18 18:00

文章 MeowJohn » 2007-09-06 13:40

經測試, 下列這段從 <!-- Begin Weather Mod-->
後面程式碼貼上去後論壇就無法開啟了..請在確認一下!

#-----[ OPEN 打開 ]------------------------------------------------
#

portal_body.tpl

#
#-----[ FIND 尋找 ]------------------------------------------------
#

<!-- END switch_none_recentfiles -->

#
#-----[ AFTER, ADD 之後, 加上 ]------------------------------------
#

<!-- Begin Weather Mod-->

gouer
星球普通子民
星球普通子民
文章: 14
註冊時間: 2007-07-26 12:54
來自: 台灣

文章 gouer » 2007-09-06 16:11

依照你的敘述,論壇無法開啟應該是指空白一片吧?
如是應該不是 portal_body.tpl 那段 HTML 的問題
而是 portal.php 程式碼所產生的問題
煩請告知你的:
1.phpbb plus 論壇編碼是 BIG5 還是 UTF-8 ?
2.PHP 是否支援 iconv ?
3.說明一下架設環境

MeowJohn
星球普通子民
星球普通子民
文章: 13
註冊時間: 2007-02-18 18:00

文章 MeowJohn » 2007-09-07 12:16

gouer 寫:依照你的敘述,論壇無法開啟應該是指空白一片吧?
如是應該不是 portal_body.tpl 那段 HTML 的問題
而是 portal.php 程式碼所產生的問題
煩請告知你的:
1.phpbb plus 論壇編碼是 BIG5 還是 UTF-8 ?
2.PHP 是否支援 iconv ?
3.說明一下架設環境

1.phpBB 2.0.22版 utf-8
2.請問是不是要開啟這個 ;extension=php_iconv.dll ?(還沒去掉分號)
3.WinXP-P, Aapche2.0.59 + PHP4.4.7

gouer
星球普通子民
星球普通子民
文章: 14
註冊時間: 2007-07-26 12:54
來自: 台灣

文章 gouer » 2007-09-07 12:46

MeowJohn 寫: 1.phpBB 2.0.22版 utf-8
2.請問是不是要開啟這個 ;extension=php_iconv.dll ?(還沒去掉分號)
3.WinXP-P, Aapche2.0.59 + PHP4.4.7
嗯,分號要去掉喔
由於你的論壇是UTF-8
氣象局的是 BIG5
因此必須利用 iconv 函數去轉碼
否則擷取下來將是亂碼
如果論壇本身是 BIG5
就不需要使用 iconv 函數了
你的問題應該是在於此
你再試試看

MeowJohn
星球普通子民
星球普通子民
文章: 13
註冊時間: 2007-02-18 18:00

文章 MeowJohn » 2007-09-10 16:14

gouer 寫:
MeowJohn 寫: 1.phpBB 2.0.22版 utf-8
2.請問是不是要開啟這個 ;extension=php_iconv.dll ?(還沒去掉分號)
3.WinXP-P, Aapche2.0.59 + PHP4.4.7
嗯,分號要去掉喔
由於你的論壇是UTF-8
氣象局的是 BIG5
因此必須利用 iconv 函數去轉碼
否則擷取下來將是亂碼
如果論壇本身是 BIG5
就不需要使用 iconv 函數了
你的問題應該是在於此
你再試試看

迪爾~gouer
使用 iconv 函數了還是不行....
以下這段加上網頁就全部顯示不出來(空白), 這段移除可以顯示但是如圖資訊不完整!可以幫幫我嗎?
Code 寫: portal.php

#
#-----[ FIND 尋找 ]------------------------------------------------
#

//
// Recent Topics
//

#
#-----[ BEFORE, ADD 之前, 加上 ]------------------------------------
#

// Begin Weather Mod
中間程式碼省略
// End Weather Mod

不加上面那段附圖:
圖檔

gouer
星球普通子民
星球普通子民
文章: 14
註冊時間: 2007-07-26 12:54
來自: 台灣

文章 gouer » 2007-09-10 17:52

我這邊模擬了你的環境做測試沒有問題
請你確定:

1.將程式碼拷貝進去時有完整地拷貝,像是遺漏了"{"或";"等都會產生錯誤
2.若你確定沒問題但依舊產生空白頁,請打開 php.ini 將 display_errors = Off 改成 On
重啟 Apache2 後再進入 portal.php 查看錯誤,並請告知詳細錯誤訊息
3.若錯誤為 "eregi() [function.eregi]: REG_EMPTY" 等字
請修改部份程式碼:
尋找

代碼: 選擇全部

$north_contents = iconv("utf-8", "big5", "苗栗(.*)中部");
$middle_contents = iconv("utf-8", "big5", "嘉義(.*)台南");
$south_contents = iconv("utf-8", "big5", "屏東(.*)東北部");
$today_contents = iconv("utf-8", "big5", "第一直(.*)星期日");

取代為

代碼: 選擇全部

$north_contents = "苗栗(.*)中部";
$middle_contents = "嘉義(.*)台南";
$south_contents = "屏東(.*)東北部";
$today_contents = "第一直(.*)星期日";

MeowJohn
星球普通子民
星球普通子民
文章: 13
註冊時間: 2007-02-18 18:00

文章 MeowJohn » 2007-09-10 23:04

gouer 寫:我這邊模擬了你的環境做測試沒有問題
請你確定:

1.將程式碼拷貝進去時有完整地拷貝,像是遺漏了"{"或";"等都會產生錯誤
2.若你確定沒問題但依舊產生空白頁,請打開 php.ini 將 display_errors = Off 改成 On
重啟 Apache2 後再進入 portal.php 查看錯誤,並請告知詳細錯誤訊息
3.若錯誤為 "eregi() [function.eregi]: REG_EMPTY" 等字
請修改部份程式碼:
尋找

代碼: 選擇全部

$north_contents = iconv("utf-8", "big5", "苗栗(.*)中部");
$middle_contents = iconv("utf-8", "big5", "嘉義(.*)台南");
$south_contents = iconv("utf-8", "big5", "屏東(.*)東北部");
$today_contents = iconv("utf-8", "big5", "第一直(.*)星期日");

取代為

代碼: 選擇全部

$north_contents = "苗栗(.*)中部";
$middle_contents = "嘉義(.*)台南";
$south_contents = "屏東(.*)東北部";
$today_contents = "第一直(.*)星期日";
hi~感謝你的耐心指導
1.產生以下錯誤訊息
Fatal error: Call to undefined function: iconv() in C:\Apache2\htdocs\yms\portal.php on line 148

2.但是如果我將Code裡所有有關 "iconv("big5", "utf-8" "去掉就安裝外表來看都顯示正常了 :-P , 只是滑鼠指到那個北部中部南部下方小正方形天氣圖示時本來應該要解釋圖形意思會變成亂碼(big5碼問題)... :roll:不知有無方式修改?

gouer
星球普通子民
星球普通子民
文章: 14
註冊時間: 2007-07-26 12:54
來自: 台灣

文章 gouer » 2007-09-10 23:14

1.確認一下 extension=php_iconv.dll 分號已拿開並重啟 Apache 2
2.只需更改我說的程式碼,不要全部取消掉 iconv 語法,因為抓回來的字是 BIG5,必須轉成 UTF-8
所以你滑鼠游標移過去會亂碼就是如此

MeowJohn
星球普通子民
星球普通子民
文章: 13
註冊時間: 2007-02-18 18:00

文章 MeowJohn » 2007-09-11 11:10

迪爾gouer
問題已經解決, 說明如下:
1.原來要支援 iconv不只 ;extension=php_iconv.dll 前面分號要移除, 也要讓PHP找得到到 PHP\ dlls 目錄下的 iconv.dll 這個檔 , 我將此檔移到PHP路徑下就ok了(我有設定path c:\php), 或是放到 c:\windows\system32 下也行, 然後重新啟動Apache..

2. 另外以下這程式碼我測試過可改可不改, 如果不改的話只要將portal.php儲存成 UTF-8編碼模式就正常了
請修改部份程式碼:
尋找
代碼:

$north_contents = iconv("utf-8", "big5", "苗栗(.*)中部");
$middle_contents = iconv("utf-8", "big5", "嘉義(.*)台南");
$south_contents = iconv("utf-8", "big5", "屏東(.*)東北部");
$today_contents = iconv("utf-8", "big5", "第一直(.*)星期日");



取代為
代碼:

$north_contents = "苗栗(.*)中部";
$middle_contents = "嘉義(.*)台南";
$south_contents = "屏東(.*)東北部";
$today_contents = "第一直(.*)星期日";
3.感謝你的指導, 有機會再交流了! :-P

gouer
星球普通子民
星球普通子民
文章: 14
註冊時間: 2007-07-26 12:54
來自: 台灣

文章 gouer » 2007-09-11 13:10

恭喜你成功了 :-)
沒想到 Win32 這麼麻煩
我從未在 Win32 平台弄過
還是 Linux 比較習慣
:-P

主題已鎖定

回到「phpBB 2 plus 綜合討論」