2


7

下記のコードはhttp://d.hatena.ne.jp/dix3/20081002/1222899116からのもので、うまく機能しています。

これは、codeigniterで snoopyを使用した例です。

Q1。 私は使えないと言うのは正しいですか。

$ this  - > load  - > library( 'snoopy')

Snoopy.phpはオブジェクトを作らないからです。 そして、以下の例はそれを行う方法ですか? もしそうなら、あなたは私にチュートリアルや詳細な使い方を説明してくれますか?

if(! class_exists( 'Snoopy')){require_once(APPPATH.'libraries / Snoopy'.EXT); }

Q2。 なぜ著者は使うのですか

$ to_specialchars = true

これが必要ですか?

Q3。 APPPATHとEXTについて説明してください。

APPPATH.'libraries / Snoopy'.EXT

php.netで確認しましたが見つかりませんでした。 EXTは延長でなければなりませんが、どこでも使えますか

前もって感謝します。

私はapplication / library / Snoopy.phpにスヌーピーがあります

私はアプリケーション/ライブラリ/ Snoopy.phpを持っています

c = new Snoopy(); }

関数getWebHtml($ url = ""、$ to_specialchars = true){$ this  - > c  - > fetch($ url); $ str = mb_convert_encoding((string)$ this  - > c  - > results、 "UTF-8"、 "auto"); ($ to_specialchars)を返しますか? htmlspecialchars($ str、ENT_QUOTES、 "UTF-8"):$ str; }

関数getWebText($ url = ""、$ to_specialchars = true){$ this  - > c  - > fetchtext($ url); $ str = mb_convert_encoding((string)$ this  - > c  - > results、 "UTF-8"、 "auto"); ($ to_specialchars)を返しますか? htmlspecialchars($ str、ENT_QUOTES、 "UTF-8"):$ str; }

関数getWebLinks($ url = ""){$ this  - > c  - > fetchlinks($ url); return(配列)$ this-> c  - > results; }

関数getWebLinksText($ url = ""、$ delimiter = ""){$ arr = $ this-> getWebLinks($ url); $ ret = ""; foreach($ arr as $ k => $ v){$ ret = $ v $区切り文字; $ retを返します。 }

// endofclass

/ *ファイルの終わりScraping.php * / / *場所:./application/libraries/Scraping.php * /?>

私はコントローラアプリケーション/ controller / mytasklist.phpを持っています

load  - > helper( 'url');

}

function index(){$ data = "";

$ this  - > _SetTpl($ data);関数_SetTpl($ data){

$ this  - > load  - > library( "scraping"); $ data ["scraping"] ["text"] = $ this-> scraping  - > getWebText( "http://www.example.com/"); $ data ["scraping"] ["html"] = $ this-> scraping  - > getWebHtml( "http://www.example.com/"); $ data ["scraping"] ["link"] = $ this-> scraping  - > getWebLinksText( "http://www.example.com/"、 "\ n");

$ tpl ["page_title"] = "ようこそ";

$ tpl ["main_content"] = $ this  - > load  - > view( 'tasklist_view'、$ data、true);

$ this  - > load  - > view( 'base_view'、$ tpl); }

}

そして私はビュー、application / view / base_view.phpを持っています

<?= $ main_content?>

2 Answer


16


Q1。 あなたが使用することができます:

$ this-> load-> library( 'snoopy');

あなたのコントローラーで。 そして、そのようにして新しいインスタンスを作成します。

$ snooper = new Snoopy();

彼らが使っている理由:

if(!class_exists( 'Snoopy')){require_once(APPPATH.'libraries / Snoopy'.EXT); }

ローダークラスはライブラリで利用できないため、$ this→ load→ library()を試して使用しようとすると致命的エラーが発生するためです。 これはコントローラ内で呼び出すことができます。これは、コントローラがコントローラクラスを拡張し、ci_baseクラスが拡張され、ci_loaderクラスが拡張されるためです。 ここに示したスクレイピングクラスはそうではありません。 調べてみると、ローダーは基本的にinclude_onceを使ってあらゆるクラス、ヘルパーなどをインクルードしていることがわかります。 あなたが使おうとしています。

Q2。

$ to_specialchars = true

パラメータとして関数宣言をいくつか組み合わせて使用​​しています。 それを '= true’に設定することは単にデフォルトを設定することなので、あなたはこれを行うことができます:

echo $ scrappy-> getWebHtml( 'http://example.com');

これはこれと同じです:

echo $ scrappy-> getWebHtml( 'http://example.com'、true);

その関数のreturn文を見ると、$ to_specialcharsがチェックされていることがわかります。それが真の場合、最初にPHP関数htmlspecialchars()を介して出力が実行されます。

Q3。 codeigniterプロジェクトのルートを見ると、index.phpでEXTは次のように定義されているのがわかります。

( 'EXT'、 '。'。pathinfo(__ FILE__、PATHINFO_EXTENSION))を定義します。

とAPPATH:

if(is_dir($ application_folder)){define( 'APPPATH'、$ application_folder。 '/'); } else {if($ application_folder == ''){$ application_folder = 'application';} define( 'APPPATH'、BASEPATH。$ application_folder。 '/'); }

したがって、これらはブートストラップ時に設定される2つの定数です。したがって、これらをアプリケーションで使用できます。また、変更したとしても、提供したコードで使用されている場所とは異なります。

次回はstackoverflowの質問ごとに1つ質問をしてください:)


0


  1. このサンプルスクレイピングコードは、ライブラリ「Snoopy - PHPネットクライアント(snoopy.sourceforge.net)」を使用して作成されています。

'' '' '

もう一度投稿しようとしました。 しかし、私はハイパーリンクで投稿することができませんでした。 ごめんなさい.. 私は自分のサイトでそれに答えます(私は初心者stackoverflow.com :-(です)

私は数日後にこれらの答えを再投稿しようとすると思います。

(http://d.hatena.ne.jp/dix3/20091004)