ホームページ  >  記事  >  バックエンド開発  >  技術オタクは、serials_PHP チュートリアルをどのように読んでいますか?

技術オタクは、serials_PHP チュートリアルをどのように読んでいますか?

WBOY
WBOYオリジナル
2016-07-13 10:27:18774ブラウズ

問題の背景

ちなみに、私は NARUTO のファンなので、毎週水曜日に必ず Web ページを更新して NARUTO の更新を待っています。その後、毎日不定期更新される連載小説にハマってしまい、F5が壊れそうになる毎日でした。 F5が悪いのは構わないが、そんなところで貴重な時間を無駄にできるのか>_

夢中プラン

世界を救える技術オタクとして、連載のせいで日夜苦しむことを避けるためには、当然、何かをしなければなりません >_< はい、マシンに更新を自動的に検出させてください。したがって、シリアル ディレクトリの内容を定期的に読み取るプログラムを作成するだけで、更新が検出された場合に、シリアルを読むよう通知する電子メールが QQ メールボックスに自動的に送信されます Y^o^Y

実装の簡単な説明

まず、問題を単純化してみましょう。上記の解決プログラムは次の部分に分割できます。

    定期実行
  • シリアルディレクトリの内容を読み取る
  • アップデートがあるか確認してください
  • メールを送信する
ちなみに最近はPHPばかりやってるので開発言語はPHPがメインです╮(╯_╰)╭

以下は技術的な解決策の簡単な説明です。結局のところ、プログラムが行うことは非常に単純であり、魔法のコードはありません

スケジュールされた実行 - crontab

私は少し前に非常に頑丈なおもちゃレベルの Linux サーバーを借りたばかりなので、このサーバー上でプログラムを 24 時間実行できるようにしています。 Linux システムでは、通常、crontab コマンドを使用してスケジュールされたタスクを追加することで、スケジュールされた実行を実行できます。たとえば、10 分ごとに実行されるように設定したい場合、新しい crontab 項目の形式は次のようになります。

りー

シリアルディレクトリの内容を読み取る

シリアル ディレクトリは Web ページ上にあり、ディレクトリの内容を読み取るには、問題を分析する必要があります。

ダウンロードページ
  • Webコンテンツを分析する
  • ウェブページをダウンロード - カール

Web ページのコンテンツは、通常、クライアントとしてのブラウザーによって HTTP プロトコルを介してサーバーから取得されます。このソリューションでは、作成するプログラムは、Web ページ データをダウンロードするための HTTP プロトコル通信のクライアントとして機能する必要があります。Linux に精通している場合は、exec 関数を使用できると考えてください。 PHP によって提供されるcurl コマンドを実行するか、PHP に付属のcurl ライブラリを使用します。

私はPHPのcurlライブラリを使用しています。興味があれば、ご自身で学習してください。

Web ページのコンテンツを分析する - 正規表現

ダウンロードしたウェブページのドキュメントは HTML コードです。私が見た NARUTO を例に挙げると、http://www.mangapanda.com/93/naruto.html (追記: 日本語と英語が理解できないということです)バージョンは中国語版よりも速く更新されますので...)

私たちにとって、シリアル ディレクトリは実際には、href 属性値が「/naruto/xxx」である HTML ドキュメント内の 要素です。

ダウンロードした HTML コードに対して単純なパターン マッチングを使用してテキスト フィルタリングを実行する限り、シリアル ディレクトリの内容を取得できます。これには正規表現の使用も最適であると考えてください。先ほどの Web ページを例に挙げると、次の正規表現を使用してシリアル ディレクトリを大まかにフィルタリングできます:

りー

使用する正規表現が異なるため、この正規表現はユーザーが設定する必要があります。

PHP では、PHP PCRE 関数で preg

match

all 関数を使用できます。 アップデートがあるか確認してください

これは比較的単純ですが、更新がある限り、連載内容は必ず変わります。したがって、毎回読み取ったシリアル ディレクトリの内容と、前回読み込んだシリアル ディレクトリの内容を比較するだけで、差異がある限り、更新があると見なされます。

履歴データの保存については、ファイルを使用するだけです。これを少し手間をかけて実行するために、MySQL データベースを使用しました。

メールを送信 - PHPMailer

私はコンピュータネットワークに詳しくなく、電子メールプロトコルについても理解していません。Googleで検索したところ、このライブラリが提供するSMTPサンプルを参照しました。

私は送信者として QQ メールを使用しています。注意する必要があるのは、この QQ メールは SMTP サービスを有効にする必要があるということです。

エフェクトのデモとコードのダウンロード

使いやすさと汎用性を考慮して、以下のようなシンプルな設定ページを作成しました:

受信したリマインダーメールの内容も非常にシンプルですが、空でも構いませんが、シリアルディレクトリへのリンクを添付するのが最善です。

コードは svn を使用してチェックアウトできます:

りー

これには、個人的な学習プロセスで蓄積されたトピックとはまったく関係のないコードが含まれていますが、真剣に読みたい人はいないと思います。本当に読みたい場合は、phplearn/ からダウンロードできます。 apps/seriesupdate_reminder/check.php フォローしてください。コードを詳しく読むことは実際にはお勧めできません。実際、最も重要な内容は「技術概要」セクションで説明されているアイデアだと思います (コードはあまりにも醜いので、作成しないでください)。一般)

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/818579.html技術記事問題の背景: 私は NARUTO のファンなので、毎週水曜日にいつも Web ページを更新して NARUTO の更新を待ちます。その後、毎日不定期更新される連載小説に夢中になりました…