htmlSQL サンプル(11) – user_agentとrefererの設定 -

$wsql->set_user_agent(‘MyAgentName/0.9′);
$wsql->set_referer(‘http://www.jonasjohn.de/custom/referer/’);
user_agentや、refererを任意に設定できる

set_user_agent('MyAgentName/0.9');
    $wsql->set_referer('http://www.jonasjohn.de/custom/referer/');

    if (!$wsql->connect('url', 'http://example.com/sample.html')){
        print 'Error while connecting: ' . $wsql->error;
        exit;
    }

    if (!$wsql->query('SELECT * FROM a')){
        print "Query error: " . $wsql->error;
        exit;
    }

    foreach($wsql->fetch_array() as $row){
        print_r($row);
    }
?>

1. $wsql = new htmlsql();
で、htmlsqlクラスのオブジェクトを作成し、$wsqlに代入。

2. $wsql->set_user_agent(‘MyAgentName/0.9′);
で、アクセスするagentを’MyAgentName/0.9′と設定する

3. $wsql->set_referer(‘http://www.jonasjohn.de/custom/referer/’);
で、参照元のページを’http://www.jonasjohn.de/custom/referer/’と設定する。

4. $wsql->connect(‘url’, ‘http://example.com/sample.html’)
で、第二引数をURLとしてアクセスします。

3. $wsql->query(‘SELECT * FROM a’)
で、2.で得たFILEに対しquery()の第一引数で指定したSQL文を実行します。
ここでは、aタグのすべての情報を抽出します。

4. foreach($wsql->fetch_array() as $row){
で、3.で得たSQLクエリの結果を取り出していきます。

[出力結果]

Array
(
    [href] => http://www.yahoo.co.jp
    [tagname] => a
    [text] => yapuu
)

Array
(
    [href] => http://www.kakaku.com
    [tagname] => a
    [text] => kakakukomo
)

Array
(
    [href] => ./index.html
    [tagname] => a
    [text] => 同じフォルダ
)

Array
(
    [href] => /home/takano/public_html/sample.html
    [tagname] => a
    [text] => 絶対パス
)

htmlSQL サンプル(10) – 特定の範囲を対象とする -

特定の範囲を対象とする
$wsql->isolate_content(‘<h1>New snippets</h1>’, ‘<p id=”rss”>’);
“<h1>New snippets</h1>”と”<p id=”rss”>”の間を対象とする。

connect('url', 'http://example.com/sample.html')){
        print 'Error while connecting: ' . $wsql->error;
        exit;
    }

    $wsql->isolate_content('

TEST

', '

TEST2

'); if (!$wsql->query('SELECT * FROM *')){ print "Query error: " . $wsql->error; exit; } foreach($wsql->fetch_array() as $row){ printf("
");
        print_r($row);
        printf("

");
}
?>

1. $wsql = new htmlsql();
で、htmlsqlクラスのオブジェクトを作成し、$wsqlに代入。

2. $wsql->connect(‘url’, ‘http://example.com/sample.html’)){
で、第二引数をURLとしてアクセスします。

3. $wsql->isolate_content(‘<h1>TEST</h1>’, ‘<h2>TEST2</h2>’);
で、対象範囲を’<h1>TEST</h1>と<h2>TEST2</h2>’の間に絞る。

4. $wsql->query(‘SELECT * FROM *’);
で、2.で得たURLに対しquery()の第一引数で指定したSQL文を実行します。
ここでは、全てのタグから全ての情報を取り出しています。

5. foreach($wsql->fetch_array() as $row){
で、4.で得たSQLクエリの結果を取り出していきます。

[出力結果]

Array
(
    [id] => apple
    [test] => daaaaaa
    [tagname] => div
    [text] => 
)

Array
(
    [tagname] => p
    [text] => リンゴの秘密
)

Array
(
    [tagname] => p
    [text] => 青森 vs 長野
)

htmlSQL サンプル(9) – XMLファイルも対象にできる -

$wsql->connect(‘file’, ‘demo_xml.xml’)
XMLファイルも対象にできる。

connect('file', 'takano_xml.xml')){
        print 'Error while connecting: ' . $wsql->error;
        exit;
    }

    if (!$wsql->query('SELECT id, name, sex FROM user WHERE $sex == "female"')){
        print "Query error: " . $wsql->error;
        exit;
    }

    foreach($wsql->fetch_array() as $row){
        print_r($row);
    }
?>

1. $wsql = new htmlsql();
で、htmlsqlクラスのオブジェクトを作成し、$wsqlに代入。

2. $wsql->connect(‘file’, ‘takano_xml.xml’)
で、第二引数をローカルファイルとしてアクセスします。

3. $wsql->query(‘SELECT id, name, sex FROM user WHERE $sex == “female”‘)
で、2.で得たFILEに対しquery()の第一引数で指定したSQL文を実行します。
ここでは、”sex”属性が”female”のタグでの、id, name, sexを抽出します。

4. foreach($wsql->fetch_array() as $row){
で、3.で得たSQLクエリの結果を取り出していきます。

[出力結果]

Array
(
    [id] => 1
    [name] => wakabayashi
    [sex] => female
)

Array
(
    [id] => 4
    [name] => tomita
    [sex] => female
)

htmlSQL サンプル(8) – 対象範囲の限定 -

対象範囲を選択しちゃう
$wsql->select(‘body’);

connect('url', 'http://example.com/sample.html')){
        print 'Error while connecting: ' . $wsql->error;
        exit;
    }

    $wsql->select('div');

    if (!$wsql->query('SELECT * FROM p')){
        print "Query error: " . $wsql->error;
        exit;
    }

    foreach($wsql->fetch_array() as $row){
        printf("
");
        print_r($row);
        printf("

");
}
?>

1. $wsql = new htmlsql();
で、htmlsqlクラスのオブジェクトを作成し、$wsqlに代入。

2. $wsql->connect(‘url’, ‘http://example.com/sample.html’)){
で、第二引数をURLとしてアクセスします。

3. $wsql->select(‘div’);
で、解析の対象とするタグを選択する。
この場合は一番最初のdivタグとなる。
三番目のdivタグを選択したい場合は $wsql->select(‘div’, 2)となる。

4. $wsql->query(‘SELECT * FROM p’);
で、2.で得たURLに対しquery()の第一引数で指定したSQL文を実行します。
ここでは、pタグから全ての情報を取り出しています。

5. for($wsql->fetch_objects() as $obj)
で、3.で得たSQLクエリの結果の各タグについて処理をしていきます。

6. foreach($wsql->fetch_array() as $row){
で、4.で得たSQLクエリの結果を取り出していきます。

[出力結果]

Array
(
    [tagname] => p
    [text] => Today is monday.

Tomorros is Tuseday. ) 

htmlSQL サンプル(7) – 配列構造の変換 -

RSSとXMLファイルを扱う場合。
さらに、配列の構造を変更しアクセスしやすくする

$wsql->query('SELECT text FROM item')
$sub_wsql->query('SELECT * FROM *');

        $sub_wsql->convert_tagname_to_key();

        /* this function converts an array that looks like this:

            $array[0]['tagname'] = 'title';
            $array[0]['text'] = 'example 1';

            $array[1]['tagname'] = 'link';
            $array[1]['text'] = 'http://www.example.org/';

            $array[2]['tagname'] = 'description';
            $array[2]['text'] = 'description bla';
            $array[2]['fulltext'] = '1'; // additional attribute

            ->; to:

            $array['title']['text'] = 'example 1';

            $array[1]['link']['text'] = 'http://www.example.org/';

            $array[2]['description']['text'] = 'description bla';
            $array[2]['description']['fulltext'] = '1'; // additional attribute

            this makes the array easier to access

        */

—–サンプルスクリプト—-

connect('url', 'http://example.com/rss.php')){
        print 'Error while connecting: ' . $wsql->error;
        exit;
    }

    if (!$wsql->query('SELECT text FROM item')){
        print "Query error: " . $wsql->error;
        exit;
    }

    foreach($wsql->fetch_objects() as $obj){

        $sub_wsql = new htmlsql();
        $sub_wsql->connect('string', $obj->text);

        if (!$sub_wsql->query('SELECT * FROM *')){
            print "Query error: " . $wsql->error;
            exit;
        }

        $sub_wsql->convert_tagname_to_key();
        $item = $sub_wsql->fetch_array();

        print "";
        print $item['title']['text'] . "
n"; } ?>

1. $wsql = new htmlsql();
で、htmlsqlクラスのオブジェクトを作成し、$wsqlに代入。

2. $wsql->connect(‘url’, ‘http://example.com/rss.php’)){
で、第二引数をURLとしてアクセスします。
今回はrssのページを対象としている。

3. $wsql->query(‘SELECT text FROM item’);
で、2.で得たURLに対しquery()の第一引数で指定したSQL文を実行します。
ここでは、itemタグから内容(text)だけを取り出します。

4. for($wsql->fetch_objects() as $obj)
で、3.で得たSQLクエリの結果の各タグについて処理をしていきます。

5. $sub_wsql = new htmlsql();
3.で得たタグ毎に新たにhtmlsqlクラスのオブジェクトを作成して$sub_wsqlに代入します。

6. $sub_wsql->connect(‘string’, $obj->text);
3.で得たタグの内容(text)の文字列に対してアクセスします。

7. $sub_wsql->query(‘SELECT * FROM *’);
3.で得たタグ内のすべてのタグのすべての情報を得ます。

8. $sub_wsql->convert_tagname_to_key();
$sub_wsqlオブジェクトのアクセスキーをtagnameとする。

9. $item = $sub_wsql->fetch_array();
[アクセスキー変換前]
print “<a href=”” . $item[1]['text'] . “”>”;
print $item[0]['text'] . “</a><br/>n”;
[アクセスキー変換後]
print “<a href=”” . $item['link']['text'] . “”>”;
print $item['title']['text'] . “</a><br/>n”;

htmlSQL サンプル(6) – preg_match()の使用

複雑なクエリーの例
$wsql->query(‘SELECT * FROM a WHERE preg_match(“/^/snippets/i”, $href) and preg_match(“/^array_/i”, $text)’)
検索条件にpreg_matchをANDで設定した場合

connect('url', 'http://example.com/sample.html')){
        print 'Error while connecting: ' . $wsql->error;
        exit;
    }
                                                                                                               if (!$wsql->query('SELECT * FROM a WHERE preg_match("/www/i", $href) and preg_match("/^kakaku/i", $text)')){
        print "Query error: " . $wsql->error;
        exit;
    }

    // fetch results as array return them:
    foreach($wsql->fetch_array() as $row){
        printf("
");
        print_r($row);
        printf("

");
}
?>

1. $wsql = new htmlsql();
で、htmlsqlクラスのオブジェクトを作成し、$wsqlに代入。

2. $wsql->connect(‘url’, ‘http://example.com/sample.html’)){
で、第二引数をURLとしてアクセスします。

3. $wsql->query(‘SELECT * FROM a WHERE preg_match(“/www/i”, $href) and preg_match(“/^kakaku/i”, $text)’);
で、2.で得たURLに対しquery()の第一引数で指定したSQL文を実行します。
ここでは、aタグに対して、「preg_match(“/www/i”, $href) and preg_match(“/^kakaku/i”, $text)」という
条件を付けて抽出してます。
これは、href属性の値に、”www”という文字列がある、かつ、内容が”kakaku”という文字列から始まる場合、
という意味になります。

4. for($wsql->fetch_array() as $row)
で、3.で得たSQLクエリの結果を取り出していきます。

[出力結果]

Array
(
    [href] => http://www.kakaku.com
    [tagname] => a
    [text] => kakakukomo
)

htmlSQL サンプル(5) – 文字列の解析 –

文字列への接続
web上のページ(URL)やローカルのファイル以外に、文字列にもアクセスできます。

$wsql->connect(‘string’, $html_string)
$wsql->query(‘SELECT * FROM a’)

<?php
    include_once("../../snoopy.class.php");
    include_once("../htmlsql.class.php");

    $html_string    = 'yapuu';
    $html_string    .= 'kakakukomo';
    $html_string    .= '同じフォルダ';
    $wsql = new htmlsql();
    if (!$wsql->connect('string', $html_string)){
        print 'Error while connecting: ' . $wsql->error;
        exit;
    }
    if (!$wsql->query('SELECT * FROM a')){
        print "Query error: " . $wsql->error;
        exit;
    }
    foreach($wsql->fetch_array() as $row){
        printf("
");
        print_r($row);
        printf("

");
}
?>

0. $html_string にhtmlタグの文字列を格納します。
$html_string = ‘yapuu‘;
$html_string .= ‘kakakukomo‘;
$html_string .= ‘同じフォルダ‘;

1. $wsql = new htmlsql();
で、htmlsqlクラスのオブジェクトを作成し、$wsqlに代入。

2. $wsql->connect(‘string’, $html_string)){
で、第二引数を文字列としてアクセスします。

3. $wsql->query(‘SELECT * FROM a’)
で、2.で得たHTMLタグの文字列に対しqueryの第一引数で指定したSQL文を実行します。

4. for($wsql->fetch_array() as $row)
で、3.で得たSQLクエリの結果を取り出していきます。

[出力結果]

Array
(
    [href] => http://www.yahoo.co.jp
    [tagname] => a
    [text] => yapuu
)

Array
(
    [href] => http://www.kakaku.com
    [tagname] => a
    [text] => kakakukomo
)

Array
(
    [href] => ./index.html
    [tagname] => a
    [text] => 同じフォルダ
)

htmlSQL サンプル(4) – substr()の使用 -

条件にsubstr()関数を使用する場合。
$wsql->query(‘SELECT * FROM a WHERE substr($href,0,1) != “/”‘)

connect('url', 'http://example.com/sample.html')){
        print 'Error while connecting: ' . $wsql->error;
        exit;
    }
    if (!$wsql->query('SELECT * FROM a WHERE substr($href,0,1) != "/"')){
        print "Query error: " . $wsql->error;
        exit;
    }
    foreach($wsql->fetch_objects() as $obj){
        print 'href.'">'.$obj->text.'
'; print "n"; } ?>

1. $wsql = new htmlsql();
で、htmlsqlクラスのオブジェクトを作成し、$wsqlに代入。

2. $wsql->connect(‘url’, ‘http://example.com/sample.html’);
で、第二引数をURLとしてアクセスします。

3. $wsql->query(‘SELECT * FROM a WHERE substr($href,0,1) != “/”‘)){
で、2.で得たURLのページに対しqueryの第一引数で指定したSQL文を実行します。
ここでは、条件(WHERE)に「substr($href,0,1) != “/”」と入れています。
これは、「href属性の値が最初の文字が”/”出なかった場合」という意味になります。

4. for($wsql->fetch_array() as $row)
で、3.で得たSQLクエリの結果を取り出していきます。

[出力結果]

yapuu
kakakukomo
同じフォルダ

htmlSQL サンプル(3) – preg_matchで絞込み -

SQLクエリにpreg_match()関数を使用し正規表現で検索を行う。
$wsql->query(‘SELECT * FROM a WHERE preg_match(“/^http:///”, $href)’)

connect('url', 'http://example.com/sample.html')){
        print 'Error while connecting: ' . $wsql->error;
        exit;
    }

    if (!$wsql->query('SELECT * FROM a WHERE preg_match("/^http:///", $href)')){
        print "Query error: " . $wsql->error;
        exit;
    }

    foreach($wsql->fetch_array() as $row){
        print_r($row);
    }
?>

1. $wsql = new htmlsql();
で、htmlsqlクラスのオブジェクトを作成し、$wsqlに代入。

2. $wsql->connect(‘url’, ‘http://example.com/sample.html’);
で、第二引数をURLとしてアクセスします。

3. $wsql->query(‘SELECT * FROM a WHERE preg_match(“/^http:///”, $href)’);
で、2.で得たURLのページに対しqueryの第一引数で指定したSQL文を実行します。
ここでは、条件(WHERE)に「preg_match(“/^http:///”, $href)」と入れています。
これは、「aタグの中でhref属性にが正規表現「/^http:///」にマッチしたものだけを抽出する」
という意味になります。
SQLクエリの中では属性の値を$hrefなどのように$属性名として使用できます。
また、タグで囲まれた文字列は$textとして使用できます。

4. for($wsql->fetch_array() as $row)
で、3.で得たSQLクエリの結果を取り出していきます。

–出力結果———————–

Array
(
    [href] => http://www.yahoo.co.jp
    [tagname] => a
    [text] => yapuu
)

Array
(
    [href] => http://www.kakaku.com
    [tagname] => a
    [text] => kakakukomo
)

———————————

htmlSQL サンプル(2) – href as url

$wsql->query(‘SELECT href as url, text FROM a’))
“href”に設定された値を”url”という名前として取り出す

connect('file', 'sample.html')){
        print 'Error while connecting: ' . $wsql->error;
        exit;
    }

    if (!$wsql->query('SELECT href as url, text FROM a')){
        print "Query error: " . $wsql->error;
        exit;
    }

    foreach($wsql->fetch_array() as $row){
        print "Link-URL: " . $row['url'] . "
n"; print "Link-Text: " . trim($row['text']) . "

nn"; } ?>

1. $wsql = new htmlsql();
で、htmlsqlクラスのオブジェクトを作成し、$wsqlに代入。

2. $wsql->connect(‘file’, ‘sample.html’)
で、第二引数をローカルファイルへのパスとしてアクセスします。

3. $wsql->query(‘SELECT href as url, text FROM a’)
で、2.で得たファイルに対しquery()の第一引数で指定したSQL文を実行します。
この場合は、”href”に設定された値を”url”という名前として取り出す
これにより、$row['url']にhrefの内容が入る。

4. for($wsql->fetch_array() as $row)
で、3.で得たSQLクエリの結果を取り出していきます。

$wsql->$fetch_array()で得られたデータには、SQL文で指定した情報のほか、
以下の情報が含まれる。

$row['text'] :該当タグで挟まれた文字列が入っている。
$row['tagname'] :該当のタグ名が入る。
$row[属性] :タグに属性があればその属性の値が入ります。