回答編集履歴
2
a
    
        answer	
    CHANGED
    
    | @@ -22,16 +22,66 @@ | |
| 22 22 | 
             
            $dom = new DOMDocument;
         | 
| 23 23 | 
             
            @$dom->loadHTMLFile("ここにURL?y={$year}");
         | 
| 24 24 | 
             
            $xpath = new DOMXPath($dom);
         | 
| 25 | 
            -
            $ | 
| 25 | 
            +
            $json = [];
         | 
| 26 | 
            -
            foreach ($xpath->query('//*[@id="expert"]//*[@class="inner"][1]//table//td') as $td) {
         | 
| 26 | 
            +
            foreach ($xpath->query('//*[@id="expert"]//*[@class="inner"][1]//table//td') as $i => $td) {
         | 
| 27 | 
            -
                $ | 
| 27 | 
            +
                $json[$i]['date'] = $td->nodeValue;
         | 
| 28 28 | 
             
            }
         | 
| 29 29 | 
             
            header('Content-Type: application/json; charset=UTF-8');
         | 
| 30 | 
            -
            echo json_encode($ | 
| 30 | 
            +
            echo json_encode($json, JSON_UNESCAPED_UNICODE);
         | 
| 31 31 | 
             
            ```
         | 
| 32 32 |  | 
| 33 33 | 
             
            ```html
         | 
| 34 | 
            +
            <!DOCTYPE html>
         | 
| 35 | 
            +
            <meta charset="utf-8">
         | 
| 36 | 
            +
            <title>Example</title>
         | 
| 37 | 
            +
            <style>
         | 
| 38 | 
            +
            [v-cloak] {
         | 
| 39 | 
            +
                visibility: hidden;
         | 
| 40 | 
            +
            }
         | 
| 41 | 
            +
            </style>
         | 
| 42 | 
            +
             | 
| 43 | 
            +
            記事検索(キーワード指定): 
         | 
| 44 | 
            +
            <input type="text" v-model="year"><br>
         | 
| 45 | 
            +
            <input type="button" value="データ取得" @click="fetchData">
         | 
| 46 | 
            +
             | 
| 47 | 
            +
            <hr>
         | 
| 48 | 
            +
             | 
| 49 | 
            +
            <div id="output" v-cloak>
         | 
| 50 | 
            +
                <virtual v-for="item in list">
         | 
| 51 | 
            +
                    <div v-if="item.url"><a href="{{item.url}}">{{item.date}}</a></div>
         | 
| 52 | 
            +
                    <div v-else>{{item.date}}</div>
         | 
| 53 | 
            +
                </virtual>
         | 
| 54 | 
            +
            </div>
         | 
| 55 | 
            +
             | 
| 56 | 
            +
            <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/1.0.20/vue.min.js"></script>
         | 
| 57 | 
            +
            <script src="https://cdnjs.cloudflare.com/ajax/libs/vue-resource/0.7.2/vue-resource.min.js"></script>
         | 
| 58 | 
            +
            <script>
         | 
| 59 | 
            +
            'use strict';
         | 
| 60 | 
            +
             | 
| 61 | 
            +
            Vue.http.options.emulateJSON = true;
         | 
| 62 | 
            +
             | 
| 63 | 
            +
            new Vue({
         | 
| 64 | 
            +
                el: '#output',
         | 
| 34 | 
            -
             | 
| 65 | 
            +
                data: {
         | 
| 66 | 
            +
                    list: [],
         | 
| 67 | 
            +
                },
         | 
| 68 | 
            +
                methods: {
         | 
| 69 | 
            +
                    fetchData: function () {
         | 
| 70 | 
            +
                        this.list = [];
         | 
| 71 | 
            +
                        this.$http.get('aaa.php', {
         | 
| 72 | 
            +
                            year: year,
         | 
| 73 | 
            +
                        }).then(function (response) {
         | 
| 74 | 
            +
                            this.list = response.data;
         | 
| 75 | 
            +
                        }, function (response) {
         | 
| 76 | 
            +
                            this.list = [];
         | 
| 77 | 
            +
                            console.error(response.data);
         | 
| 78 | 
            +
                        });
         | 
| 79 | 
            +
                    },
         | 
| 80 | 
            +
                }
         | 
| 81 | 
            +
            });
         | 
| 82 | 
            +
            </script>
         | 
| 35 83 | 
             
            ```
         | 
| 36 84 |  | 
| 85 | 
            +
            (jQueryでやるのすごくダルそうだったのでVue.js使いました)
         | 
| 86 | 
            +
             | 
| 37 87 | 
             
            サイトの具体的なURLも提示されていないので動作確認できてませんが,大まかな流れはこんな感じでいいかと思います.
         | 
1
a
    
        answer	
    CHANGED
    
    | @@ -1,3 +1,16 @@ | |
| 1 | 
            +
            ```php
         | 
| 2 | 
            +
            $d = $item->find("innertext");
         | 
| 3 | 
            +
            $tmp = array();
         | 
| 4 | 
            +
            if(is_array($d)) $tmp["date"] = $d[0]->innertext;
         | 
| 5 | 
            +
            $ts->add($tmp);          
         | 
| 6 | 
            +
            ```
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            この辺全体的におかしいですね… これだと`<innertext>`というHTMLタグをfindしてきていることになっちゃうのでは…
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            ------
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            【蛇足】
         | 
| 13 | 
            +
             | 
| 1 14 | 
             
            Simple HTML DOM Parser は古いライブラリで非常に動作が遅いです.せっかくなので**速い上に外部ライブラリが不必要**な方法で回答してみます.
         | 
| 2 15 |  | 
| 3 16 | 
             
            - [PHPネイティブのDOMによるスクレイピング入門](http://qiita.com/mpyw/items/c0312271819baee09132)
         | 
