mud_sanc 板


LINE

今天抽空寫了,順便學更多的 php 語法,然後同樣土法煉鋼去寫, 以下是執行結果: > ./get_mudlist.php 2018-01-04 http://www.revivalworld.org/mud/taiwanmudlist 萬王之王 telnet://kk.muds.idv.tw:4000 325 金庸修真錄 telnet://jy.mud.com.tw:6666 248 小貓的世界 telnet://122.117.3.161:5555 154 聖殿英雄傳說 telnet://sanc.myvnc.com:4002 109 重生的世界 telnet://mud.revivalworld.org:4000 74 三國歪傳 telnet://mud.csie.org:3838 42 人在江湖 telnet://katok.no-ip.org:5555 21 狂想空間 telnet://fs.twkang.net:5555 19 五星物語 telnet://140.96.180.33:5000 16 時空幻境 telnet://td.muds.net:5000 11 笑傲江湖 telnet://wulin.game-host.org:5050 0 迴風追夢 telnet://60.199.248.181:4000 0 渾沌幻世 telnet://roc.csie.org:5555 0 虛幻時空 telnet://it.muds.net:7000 0 亂世群雄 telnet://220.133.58.190:8888 0 四度空間 telnet://void7777.no-ip.org:7777 0 夢幻七域 telnet://140.124.181.189:7000 0 龍域傳奇 telnet://dragonrealms.co:3000 0 東方故事 telnet://es.muds.net:8000 0 失落的國度 telnet://doommud.twbbs.org:4000 0 亞雷恩傳奇 telnet://arion.allowed.org:6000 0 風之大陸 telnet://54.215.169.231:4040 0 風雲再起 telnet://122.117.3.161:8000 0 霹靂爭雄錄 telnet://220.133.224.86:9999 0 再戰江湖 telnet://61.216.166.227:5678 0 瑪爾斯群英傳 telnet://218.161.10.205:8888 0 失落的亞特蘭提斯 telnet://thelostatlantis.com:1234 0 人數由多到小排序。程式碼如下: #!/usr/bin/php -q <?php // 以下幾行的寫法都跟 get_news.php 一樣, 就是讀網頁然後編碼 $fh= file_get_contents('https://www.revivalworld.org/mud/taiwanmudlist'); $encode=mb_convert_encoding($fh,'BIG5','UTF-8'); // 重點就在於拆解字串的選擇 $tmps=explode("_blank'><font color=",$encode); $date = new DateTime(); $msg = $date->format('Y-m-d'). " http://www.revivalworld.org/mud/taiwanmudlist\n"; $mark=0; // 開始做 foreach foreach($tmps as $tmp) { // 兩種字串不處理, 同 get_news if($mark==0) { $mark=1; continue; } if(strlen($tmp)>1000) continue; /* 讀出來的字串大概長成以下, 亮字分別代表 mud中文名、mud英文名、 mud連線ip、mud人數。人數資訊是最難讀的。 000000>五星物語</font><br><font color=999999>The Five Star Stories</font> </td><td bgcolor=ffffef style='font-size:15px;border-bottom:1px solid #fff'> <a href='telnet://140.96.180.33:5000'><font color=000000>140.96.180.33</font> </td><td bgcolor=ffffef align=center style='border-bottom:1px solid #fff'>5000 </td><td bgcolor=005f00 align=center style='color:#5f5; border-bottom:1px solid #fff'>○</td><td bgcolor=ffffef align=center style='border-bottom:1px solid #fff'>16</td><td bgcolor=ffffef align=center style='border-bottom:1px solid #fff'>01/04/2018 13:38</td></tr><tr><td bgcolor=efefdf style='border-bottom:1px solid #fff;padding:3px;'><a href= 'http://www.revivalworld.org/online/rw/mrtg/mnlmudlist/void7777.no-ip.org_7777/ void7777.no-ip.org_7777.html' target=' */ // 先對上面那樣的字串做一些前期過濾,字串會短一點也較好處理 // 做完下面三個 replace 後,mud中文名 就會顯示在 $tmp 最前面的位置 // 而且中文名跟英文名之間會以 ## 連接 $tmp=str_replace("000000>","",$tmp); $tmp=str_replace("999999>","",$tmp); $tmp=str_replace("</font><br><font color=","##",$tmp); // 取出 中文名##英文名 $p=strpos($tmp,"</font>"); $name=substr($tmp,0,$p); // 對 ## 做拆解 $tmps1=explode("##",$name); // 令 chi_name=中文名, eng_name=英文名 $chi_name=$tmps1[0]; $eng_name=$tmps1[1]; // 然後再對 $tmp 做過濾,先把 中文名##英文名 從 $tmp replace 掉 // 再做必要的其它 replace $tmp=str_replace($name,"",$tmp); $tmp=str_replace("</font></td><td bgcolor=ffffef style='font-size:15px;border-bottom:1px solid #fff'><a href='","",$tmp); $tmp=str_replace("</font></td><td bgcolor=efefdf style='font-size:15px;border-bottom:1px solid #fff'><a href='","",$tmp); // 這時 連線ip 就會顯示在 $tmp 最前面的位置 // 令 $ip = 連線ip $p=strpos($tmp,"'"); $ip=substr($tmp,0,$p); // 再把 ip 從 $tmp replace 掉 $tmp=str_replace($ip,"",$tmp); // 剩下的字串還是很長, 但包含人數的字串大約在 250~350 的位置 $tmp=substr($tmp,250,350); // 人數會包在 >人數</td> 這樣的字串內 // 取出人數時會取到兩種, 一種是直接為字串數字, 如 "103" // 一種為 <font ...>103</font> 這種的, 其字串長度會 >4 $p1=strpos($tmp,">"); $p2=strpos($tmp,"</td>"); $num=substr($tmp,$p1+1,$p2-$p1-1); // 人數不為 0 及正整數的情況 $num 長度會>4, 實際顯示為 N/A // 這時就讓 $num 為 0 (因為讀不到人數) if(strlen($num)>4) $num="0"; // 這個相當於 mudlist[eng_name]=({chi_name,ip,num}); // 也就是 key 值是每一個 mud 的英文名, 其內容則為一個陣列 // 該陣列裡頭存了 ({中文名, 連線ip, 目前在線人數}) 的資料 $mudlist[$eng_name]=array($chi_name,$ip,$num); } // 這個相當於 eng_names=keys(mudlist) 讀出所有 key 值 $eng_names=array_keys($mudlist); // 這個相當於 s=sizeof(eng_names); $s=sizeof($eng_names); // 土法煉鋼: 氣泡排序法 for($i=0;$i<$s;$i++) { for($j=0;$j<$s;$j++) { // 這個相當於 n1=atoi(mudlist[eng_names[i]][2]); 把字串變成整數 $n1=(int)$mudlist[$eng_names[$i]][2]; $n2=(int)$mudlist[$eng_names[$j]][2]; // 變成整數就能比大小 if($n1>$n2) { $k=$eng_names[$i]; $eng_names[$i]=$eng_names[$j]; $eng_names[$j]=$k; } } } // 做格式化輸出,google到的語法是 %幾=第幾變數, 再加上後面的$什麼格式 // 後者跟 sanc 使用的一樣, 主要是前面加 %幾 這樣而已, 有三個變數時就 // 給三個變數 foreach($eng_names as $eng_name) $msg.=sprintf("%1$-16s %2$-36s %3$4s\n", $mudlist[$eng_name][0],$mudlist[$eng_name][1],$mudlist[$eng_name][2]); // 最後輸出存成檔案 mudlist $file = "/home/xxx/mudlist"; file_put_contents($file, $msg); ?> 目前設定 get_mudlist 每隔 30 分鐘會去抓一次資料來 update。 暫時就寫到這裡,等以後有空再來寫別的,例如說發票跟樂透等, 屬於「不是一定要第一時間知道最新資訊」的那種就可以寫,至於 一定要知道最新資訊的例如匯率(變動頻繁)就不寫。 一、更熟悉使用 str_replace、substr、sprintf 等字串處理函數 的使用。 二、第一次使用像是 mapping 的變數,還 ok。 三、排序理論上應該有專門的處理函數,但是在未知的情況下也可 以先用土法煉鋼的做法,用氣泡排序法來處理。 四、陣列的累加例如 tmps+=({tmp}) 這樣子的,目前還試不太出來 ,有空會練習看看。目前有轉彎用法就是先用 mapping 去存東 西,再用 array_keys 就能讀出一個累加的字串。 五、學 mud coding 還是很有用的,至少在土法煉鋼上面來說,從 tmi2-mudlib 過渡到 php 幾乎可以用勢如破竹來形容,因為都 可以在 php 上找到相同或相近的語法,等於我在 mud coding 上的基礎,全都可以用在 php 腳本檔的撰寫上。 Laechan --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.117.106.224
※ 文章網址: https://webptt.com/m.aspx?n=bbs/mud_sanc/M.1515054375.A.873.html
1F:→ laechan : 下次可以寫的東西, mud_sanc 板的文章列表之類的 01/04 16:29
※ 編輯: laechan (122.117.106.224), 01/04/2018 16:38:06
2F:→ laechan : 我接下來會研究的是字串"物件"的幾個語法呼叫,希望 01/04 16:39
3F:→ laechan : 在讀 html 檔時盡量使用這個來處理 01/04 16:40
4F:推 typers : 四:追加一個陣列元素 tmps[]=tmp; 01/04 17:03
5F:→ typers : 兩個陣列相加可以用 array_merge() 01/04 17:03
6F:→ laechan : typers 3Q 01/04 17:30
※ 編輯: laechan (122.117.106.224), 01/04/2018 19:21:21







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP