国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

技術(shù)宅是怎樣看連載的

2019-11-15 01:39:51
字體:
供稿:網(wǎng)友
技術(shù)宅是怎樣看連載的問題背景

話說我是個火影迷,所以每到周三的時候,總會為了等火影的更新不停地刷新網(wǎng)頁。后來我還迷上了一部連載小說,每天不定期更新,于是每天就在那里刷呀刷,F(xiàn)5都快爛了。F5爛了沒關(guān)系,程序猿那么忙,怎么可以把寶貴的時間浪費在這種地方 >_< 等到周四再去看火影不就行了么,每隔一兩天看一次小說不就行了么,可是,臣妾做不到啊 T.T

意淫方案

為了避免因為幾個連載而日夜煎熬,作為一個能拯救世界的技術(shù)宅,當(dāng)然要做點什么了 >_< 沒錯,讓機(jī)器來自動幫我檢測更新就行啦。所以,我只要寫一個程序,定時讀取連載目錄的內(nèi)容,如果檢測到有更新,可以自動發(fā)一封郵件到我的QQ郵箱提醒我去看連載 Y^o^Y

實現(xiàn)簡述

首先是簡化我們的問題,上面提到的解決方案的程序里面,可以分為以下幾個部分:

  • 定時執(zhí)行
  • 讀取連載目錄的內(nèi)容
  • 檢測是否有更新
  • 發(fā)郵件

順便提一下,我最近做php比較多,所以開發(fā)語言就以 PHP 為主咯 ╮(╯_╰)╭

下面只對技術(shù)方案做簡單的說明,畢竟程序做的事情也很簡單,沒有什么很神奇的代碼

定時執(zhí)行 - crontab

前段時間剛好租過一臺很矬的玩具級 linux 服務(wù)器,所以我可以讓程序在這臺服務(wù)器上24小時不停地跑。在 Linux 系統(tǒng)里面,定時執(zhí)行通常可以通過 crontab 命令新增一條定時任務(wù)。例如,我要設(shè)置每隔10分鐘執(zhí)行一次,那么 crontab 新增項的格式如下:

*/10 * * * *  /path/task.sh
讀取連載目錄的內(nèi)容

連載目錄是在一個網(wǎng)頁上的,要讀取出目錄的內(nèi)容,還需要再把這個問題分解:

  • 下載網(wǎng)頁
  • 分析網(wǎng)頁內(nèi)容
下載網(wǎng)頁 - curl

網(wǎng)頁的內(nèi)容一般是是瀏覽器作為客戶端通過 HTTP 協(xié)議從服務(wù)器獲取的。在我們的方案里,我們要寫的程序就需要充當(dāng) HTTP 協(xié)議通信的客戶端來下載網(wǎng)頁的數(shù)據(jù),熟悉 Linux 的你應(yīng)該會想到 curl 命令行工具,這里可以用 PHP 提供的 exec 函數(shù)來執(zhí)行 curl 命令,或者使用 PHP 自帶的 curl 庫。

我使用的是 PHP 的 curl 庫,有興趣可以自行了解。

分析網(wǎng)頁的內(nèi)容 - 正則表達(dá)式

下載到的網(wǎng)頁文檔是 html 代碼,以我看的火影忍者為例,http://www.mangapanda.com/93/naruto.html ,(PS:表示看不懂日語而且英文版的更新速度比中文版的快,所以就...)

對于我們來說,連載目錄其實就是 html 文檔中的這部分 href 屬性值為 "/naruto/xxx" 的 <a> 元素了。

只要對下載到的 html 代碼用簡單的模式匹配做文本過濾,就可以得到連載目錄的內(nèi)容了,我覺得你也應(yīng)該想得到,用正則表達(dá)式來做這件事情再適合不過了。以剛才那個網(wǎng)頁為例,可以用下面這行正則表達(dá)式來粗略地過濾出連載目錄:

|href="/naruto/[^"]*"|

因為不同的要使用的正則表達(dá)式會不一樣,所以這個正則表達(dá)式應(yīng)該是由用戶配置的。

在 PHP 里面,可以使用 PHP PCRE Functions 中的 PReg_match_all 函數(shù)。

檢測是否有更新

這個相對比較簡單,只有有更新,那么連載上當(dāng)?shù)膬?nèi)容就一定會有變化。所以只要把每次讀取到連載目錄和上一次讀取到的連載目錄的內(nèi)容進(jìn)行比較,只要有不同,就認(rèn)定有有更新即可。

至于歷史數(shù)據(jù)的儲存,用一個文件就可以了。我有點小題大作地使用了 MySQL 數(shù)據(jù)庫來做這個事情。

發(fā)郵件 - PHPMailer

不熟悉計算機(jī)網(wǎng)絡(luò)的我對郵件協(xié)議了解也是一塌糊涂,經(jīng)過 google 之后,找到了 PHPMailer 庫,參考這個庫提供的 SMTP 的例子即可。

我使用一個 QQ 郵箱來作為發(fā)件人,需要注意的問題是這個 QQ 郵件要開通 SMTP 服務(wù)。

效果演示和代碼下載

考慮到對用戶友好以及通用性,所以做了一個簡易的配置頁面,如下圖所示:

收到的提醒郵件的內(nèi)容也很簡單,內(nèi)容為空都可以,不過最好還是附上連載目錄的鏈接。

代碼:https://github.com/roxma/cpp_learn/tree/master/php_learn/apps/series_update_reminder

這里面夾雜著一些個人學(xué)習(xí)過程中積累的和主題無關(guān)的代碼,我相信應(yīng)該不會有人想認(rèn)真看,如果真的很想看,可以從 php_learn/apps/series_update_remindder/check.php 跟進(jìn)去。代碼真的不建議細(xì)看,我覺得最重要的內(nèi)容其實還是“技術(shù)概要”那一節(jié)里面的講到的思路,(好吧代碼太難看你偷偷告訴我就行了不要聲張)


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 鄱阳县| 石河子市| 托克逊县| 安庆市| 治多县| 朝阳区| 从江县| 五常市| 特克斯县| 苍南县| 交口县| 罗江县| 哈密市| 东阿县| 壤塘县| 炉霍县| 青浦区| 芜湖县| 搜索| 荥经县| 东宁县| 定远县| 密山市| SHOW| 孟州市| 河西区| 沭阳县| 错那县| 乃东县| 温泉县| 中西区| 定兴县| 芜湖县| 大方县| 四川省| 绍兴县| 深圳市| 蓬安县| 库伦旗| 通榆县| 江西省|