3

次のコードは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 にスヌーピーがいます

私は application/library/Snoopy.php を持っています

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Scraping{
    var $c; 
    function Scraping(){
        if ( ! class_exists('Snoopy'))
        {
            require_once(APPPATH.'libraries/Snoopy'.EXT);
        }
        $this -> c = new Snoopy();
    }

    function getWebHtml($url="",$to_specialchars=true){
        $this ->c -> fetch( $url );
        $str = mb_convert_encoding( (string) $this -> c -> results,"UTF-8","auto");
        return ($to_specialchars) ? htmlspecialchars($str , ENT_QUOTES , "UTF-8" ) : $str ;
    }

   function getWebText($url="",$to_specialchars=true){
        $this -> c -> fetchtext( $url );
        $str = mb_convert_encoding( (string) $this -> c -> results,"UTF-8","auto");
        return ($to_specialchars) ? htmlspecialchars($str , ENT_QUOTES , "UTF-8" ) : $str ;
    }

    function getWebLinks($url=""){
        $this -> c -> fetchlinks( $url );
        return (array) $this-> c -> results ;
    }

    function getWebLinksText($url="",$delimiter="<br>"){
        $arr = $this-> getWebLinks($url) ;
        $ret ="";
        foreach($arr as $k => $v){
            $ret .= $v . $delimiter ;
        }
        return $ret;
    }

} //endofclass

/* End of file Scraping.php */
/* Location: ./application/libraries/Scraping.php */
 ?>

コントローラー application/controller/mytasklist.php があります

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Mytasklist extends Controller {

function Mytasklist()
{
  parent :: Controller(); 

  $this -> load -> helper( 'url' ); 

} 

    function index()
    {
      $data = "";

      $this -> _SetTpl( $data );
    } 
 function _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"] = "Welcome";

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

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


}

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <meta name="keywords" content="keyword here" />
    <meta name="description" content="description here" />
    <title><?php if(isset($page_title)){echo $page_title ;}?></title>
    <?php if(isset($xajax_js)){echo $xajax_js ;}?>
    <link href="http://127.0.0.1/ci_day4/css/mystyle.css" rel="stylesheet" type="text/css"/>
</head>
<body>

<div id="container">


    <div id="rightblock">

        <div id="content">

            <?=$main_content?>

        </div>

    </div>

</div>

</body>
</html>
4

2 に答える 2

18

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クラスを拡張するためです。これは、$this->loadなどの呼び出しを行う機能が由来するci_loaderクラスを拡張します。ここに示したScrapingクラスはそうではありません。掘り下げてみると、ローダーは基本的にinclude_onceを使用して、使用しようとしているクラスやヘルパーなどを含めていることがわかります。

Q2。

$to_specialchars = true

いくつかの関数宣言でパラメーターとして使用されています。'= true'に設定すると、デフォルトが設定されるだけなので、次のことができます。

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

これはこれと同じです:

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

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

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

define('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つの質問があります:)

于 2009-10-03T17:49:02.247 に答える
0

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


もう一度投稿してみました。しかし、ハイパーリンクで投稿することはできませんでした。申し訳ありませんが..私は私のサイトでそれに答えます。(私は初心者のstackoverflow.comです:-()

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

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

于 2009-10-03T20:17:03.950 に答える