回答編集履歴

2

a

2016/06/11 11:40

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -46,17 +46,17 @@
46
46
 
47
47
  $xpath = new DOMXPath($dom);
48
48
 
49
- $texts = [];
49
+ $json = [];
50
50
 
51
- foreach ($xpath->query('//*[@id="expert"]//*[@class="inner"][1]//table//td') as $td) {
51
+ foreach ($xpath->query('//*[@id="expert"]//*[@class="inner"][1]//table//td') as $i => $td) {
52
52
 
53
- $texts[] = $td->nodeValue;
53
+ $json[$i]['date'] = $td->nodeValue;
54
54
 
55
55
  }
56
56
 
57
57
  header('Content-Type: application/json; charset=UTF-8');
58
58
 
59
- echo json_encode($texts, JSON_UNESCAPED_UNICODE);
59
+ echo json_encode($json, JSON_UNESCAPED_UNICODE);
60
60
 
61
61
  ```
62
62
 
@@ -64,10 +64,110 @@
64
64
 
65
65
  ```html
66
66
 
67
+ <!DOCTYPE html>
68
+
69
+ <meta charset="utf-8">
70
+
71
+ <title>Example</title>
72
+
73
+ <style>
74
+
75
+ [v-cloak] {
76
+
77
+ visibility: hidden;
78
+
79
+ }
80
+
81
+ </style>
82
+
83
+
84
+
85
+ 記事検索(キーワード指定):
86
+
87
+ <input type="text" v-model="year"><br>
88
+
89
+ <input type="button" value="データ取得" @click="fetchData">
90
+
91
+
92
+
93
+ <hr>
94
+
95
+
96
+
97
+ <div id="output" v-cloak>
98
+
99
+ <virtual v-for="item in list">
100
+
101
+ <div v-if="item.url"><a href="{{item.url}}">{{item.date}}</a></div>
102
+
103
+ <div v-else>{{item.date}}</div>
104
+
105
+ </virtual>
106
+
107
+ </div>
108
+
109
+
110
+
111
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/1.0.20/vue.min.js"></script>
112
+
113
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/vue-resource/0.7.2/vue-resource.min.js"></script>
114
+
115
+ <script>
116
+
117
+ 'use strict';
118
+
119
+
120
+
121
+ Vue.http.options.emulateJSON = true;
122
+
123
+
124
+
125
+ new Vue({
126
+
127
+ el: '#output',
128
+
67
- 現在編集中…
129
+ data: {
130
+
131
+ list: [],
132
+
133
+ },
134
+
135
+ methods: {
136
+
137
+ fetchData: function () {
138
+
139
+ this.list = [];
140
+
141
+ this.$http.get('aaa.php', {
142
+
143
+ year: year,
144
+
145
+ }).then(function (response) {
146
+
147
+ this.list = response.data;
148
+
149
+ }, function (response) {
150
+
151
+ this.list = [];
152
+
153
+ console.error(response.data);
154
+
155
+ });
156
+
157
+ },
158
+
159
+ }
160
+
161
+ });
162
+
163
+ </script>
68
164
 
69
165
  ```
70
166
 
71
167
 
72
168
 
169
+ (jQueryでやるのすごくダルそうだったのでVue.js使いました)
170
+
171
+
172
+
73
173
  サイトの具体的なURLも提示されていないので動作確認できてませんが,大まかな流れはこんな感じでいいかと思います.

1

a

2016/06/11 11:40

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -1,3 +1,29 @@
1
+ ```php
2
+
3
+ $d = $item->find("innertext");
4
+
5
+ $tmp = array();
6
+
7
+ if(is_array($d)) $tmp["date"] = $d[0]->innertext;
8
+
9
+ $ts->add($tmp);
10
+
11
+ ```
12
+
13
+
14
+
15
+ この辺全体的におかしいですね… これだと`<innertext>`というHTMLタグをfindしてきていることになっちゃうのでは…
16
+
17
+
18
+
19
+ ------
20
+
21
+
22
+
23
+ 【蛇足】
24
+
25
+
26
+
1
27
  Simple HTML DOM Parser は古いライブラリで非常に動作が遅いです.せっかくなので**速い上に外部ライブラリが不必要**な方法で回答してみます.
2
28
 
3
29