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/cn.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灯, 水草

请输入看板名称,例如:Tech_Job站内搜寻

TOP