Motie 中国語 Web サイトの非 VIP 章用に、curl と正規表現を使用して作成された小説グラバーです。小説をダウンロードするための小説 ID の入力をサポートします。 依存関係:カール Curl、正規表現、Ajax などのテクノロジーが使用されており、初心者に適しています。ローカルでテストする場合は、インターネットに接続していることを確認し、PHP がcurl モードをオンにしていることを確認する必要があります。
- session_start();
- //自動的にクロールされた記事を開始するクラスにカプセル化します
- #header("Refresh:30;http://www.test.com:8080");
- クラス SpiderTools{
- //////////////////////////////////////////// /// ////////////////////////////////////////////// ////// //////////
- /*記事IDを入力して記事タイトルを解析*/
- ////////////////// /////////// ////////////////////////////////////// ////////////// //////////////////////////////
- public function getBookNameById($ aid){
- //curl を初期化します
- $ch=curl_init() ;
- //url
- $url='http://www.motie.com/book/'.$aid;
- if(is_numeric($aid) ){
- //正規表現マッチング
- $ru="/ s*(.*)s* s*/";
- }
- else {
- //ゾンビ発生時の家族の生存_ゾンビ発生の第一章が友人のアイ・リーアのために更新されました~_砥ぎ鉄
- $ru="/(.*) /";
- }
- //URL を含むオプションを設定します
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER) , 1);//コンテンツを自動的に出力しない
- curl_setopt( $ch, CURLOPT_HEADER, 0) //ヘッダー情報を返さない
- curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 0); //curlを実行する
- $output =curl_exec; ($ch);
- //エラーメッセージ
- if(curl_exec ($ch) === false){
- die(curl_error($ch));
- }
- // エラーが発生したかどうかを確認します
- if(curl_errno($ ch)){
- echo 'Curl エラー: ' .curl_error( $ch);
- }
- //curl ハンドルを解放します
- curl_close($ch);
- $arr=array();
- preg_match_all($ru,$output, $arr);
- return $arr[1][0] ;
- }
- /////////////////////////////// //////////////// ///////////////////////////////// ////////////////// //////////
- /*記事内容を解析するには記事 ID を入力*/
- //////// ///////////////////////////////////////////////// ///////////////////////////////////////////////// ////
- public function getBookContextById($aid){
- //記事の解析を開始します
- $ids=array( );
- $ids=explode("_",$aid);
- $titleId=trim($ids [0]);
- $aticleId=trim($ids[1]);
- $ch=curl_init();
- $ru="/
[sS]*< pre ondragstart="return false" oncopy="return false;" oncut="return false;" oncontextmenu="return false " class="note" id="html_content_d*">[sS]*(.*)< img src="/ajax/chapter/$titleId/$aticleId" class="hidden" /> pre>/ui";
- $url='http://www.motie.com/book/' .$aid;
- //正規表現のマッチング
-
- //URLを含むオプションを設定します
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//コンテンツを自動的に出力しません
- curl_setopt($ch, CURLOPT_HEADER, 0);//ヘッダー情報を返さない
- curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 0 );
- //curl を実行
- $output =curl_exec($ch);
- //エラーメッセージ
- if (curl_exec($ch) === false){
- die(curl_error($ch));
- }
- / / エラーが発生したかどうかを確認します
- if(curl_errno($ch)){
- echo 'Curl エラー: ' 。 curl_error($ch);
- }
- $arr=array();
- $arr2=array();
- preg_match_all ($ru,$output,$arr);
- curl_close($ch);
- #var_dump($arr );
- $s=$arr[0][0];
- $s=substr($s,180) ;
- $arr2=explode(" return trim($arr2[ 0]);
- }
-
- ///////////////// //////////////////////// ///////////////////////////////////////////////// /////////////////////
- /*静的メソッド@生成された小説ファイルを直接呼び出すことが可能 */
- ///////////// //////////////////////////////////// ///////////// ///////////////////////////////////////////////
- public static function createBookById($id){
-
- if(!is_numeric($id)){
-
- echo "
INIT BEGIN START WRITE!";
- $ st=new self();
- $cons =$st->getBookContextById($id);
- $title=$st->getBookNameById($id);
- $cons=trim($cons);
- $t =explode(" ",$title);
- //ディレクトリを構築します
- $dir=array();
- $dir=explode("_",$t[0]);
- $wzdir=$dir[0] //ブック名をディレクトリ名として使用します
- $wzchapter =$dir[1]; //章
- //ディレクトリを作成します
- $wzdir2=iconv("UTF-8", "GBK", $wzdir); //ディレクトリをエンコードするときは、$wzdir への参照に注意してください。ここでは文字列が予約されており、ファイル名を作成するために使用されます。二次エンコードを防ぐためにここでは使用できません
- if(!file_exists($wzdir2)){
- mkdir($wzdir2) // ディレクトリを作成します
- }
- //ファイル名を作成します
- $wztitle="./".$wzdir."/"."$t[0]".".txt";
- //保存されたファイル名が文字化けしていないことを確認します
- $ wztitle=iconv ("UTF-8", "GBK", $wztitle);
- $f=fopen($wztitle,"w+");
- fwrite($f,$cons);
- echo "$wzdir ".$wzchapter."書き込み成功";
- fclose($f);
-
- }
- else{
- $ ids=self::getBookIdsById($id);
-
- //ここではサーバーがオフラインになっている可能性があるため、セッション記録ループを使用するのが最善です
- #for($i=$_SESSION["$id"."_fid" ];$ i<=count($ids);$_SESSION["$id"."_fid"]++,$i++){
-
- #self::createBookById($id."_".$ids[$ _SESSION[" $id"."_fid"]++]);//id を構築します
- #}
-
- for($i=$_SESSION["$id"."_fid"];$i<=count($ ids); $_SESSION["$id"."_fid"]++,$i++){
-
- self::createBookById($id."_".$ids[$i]);// id を構築する }
-
- # echo "
書き込み作業は完了しました";
- #echo $id."_".$ids [0 ]."
";
- #var_dump($ids);
-
- }
-
- }
- /*
- 小説のIDをすべて取得
- @param $id 記事ID
- @return array;
- */
- public static function getBookIdsById($aid){
- $ch=curl_init();
- $url='http://www.motie.com/book/'.$aid."/chapter";
- / /ここに注意 ?最低限一致するアイテムが取得可能
- $ru='/[sS]*?
- [sS]*?.*? //URL を含むオプションを設定します
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//自動的に出力しませんcontent
- curl_setopt($ch, CURLOPT_HEADER, 0); //ヘッダー情報を返しません
- curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 0); //curlを実行します
- $output =curl_exec($ch);
- //エラーが発生しました
- if(curl_errno($ch)){
- echo 'Curl error: ' .curl_error($ch);
- }
- //curl ハンドルを解放します
- curl_close($ch);
- $arr=array( );
- preg_match_all ($ru,$output,$arr,PREG_PATTERN_ORDER);
- return $arr[1];
- }
- }
-
-
-
-
-
- ?>
-
-
- コードをコピー
session_start(); require_once("SpiderTools.class.php");- if($_REQUEST["bid"]){
- if(is_numeric($_REQUEST["bid"]) ){
- SpiderTools::createBookById(trim($_REQUEST["bid"]));
- }
- else{
- echo "
正しい記事 ID を入力してください ";
- }
- }
- ?>
-
-
-
- コードをコピー
|