1 : <?
2 :
3 :
4 :
5 :
6 :
7 :
8 :
9 :
10 :
11 :
12 :
13 :
14 :
15 :
16 :
17 :
18 :
19 :
20 :
21 :
22 :
23 : class SourPHPCore{
24 :
25 :
26 :
27 :
28 :
29 :
30 : protected static $url = null;
31 :
32 :
33 :
34 :
35 :
36 :
37 : protected static $contentPerPage = null;
38 :
39 :
40 :
41 :
42 :
43 :
44 : public function __construct() {
45 27 : $this->url = "http://sozluk.sourtimes.org/";
46 27 : $this->contentPerPage = 25;
47 27 : }
48 :
49 :
50 :
51 :
52 :
53 :
54 :
55 :
56 :
57 : function fetchUrl($url) {
58 21 : if( $data = @file_get_contents($url) ) {
59 20 : return $data;
60 : }
61 1 : return false;
62 : }
63 :
64 :
65 :
66 :
67 :
68 :
69 :
70 : function fetchId( $entryId ) {
71 7 : $entryId = (int) $entryId;
72 7 : if($entryId < 1) {
73 :
74 :
75 :
76 1 : return false;
77 : }
78 6 : $url = $this->url."show.asp?id=".$entryId;
79 :
80 6 : return $this->fetchUrl($url);
81 : }
82 :
83 :
84 :
85 :
86 :
87 :
88 :
89 :
90 : function fetchEntry( $entryName , $page=1) {
91 14 : $page = (int) $page;
92 14 : $entryName = (string) $entryName;
93 14 : if(strlen($entryName) < 1 ) {
94 :
95 :
96 :
97 1 : return false;
98 : }
99 13 : $encodedEntryName = urlencode( trim($entryName) );
100 :
101 13 : $pageToGo = 1;
102 13 : if($page > 1 ) {
103 5 : $pageToGo = $page;
104 5 : }
105 :
106 13 : $url = $this->url."show.asp?t=".$encodedEntryName."&p=".$pageToGo;
107 :
108 13 : return $this->fetchUrl($url);
109 : }
110 :
111 :
112 :
113 :
114 :
115 :
116 :
117 :
118 :
119 : function createDomDocumentFromData($data) {
120 17 : if(!$data) {
121 1 : return false;
122 : }
123 16 : $doc = new DOMDocument();
124 16 : $doc->loadHTML ($data);
125 16 : return $doc;
126 : }
127 :
128 :
129 :
130 :
131 :
132 :
133 :
134 :
135 :
136 :
137 : function XPathQueryToDoc($doc, $queryString){
138 15 : $xpath = new DOMXpath($doc);
139 15 : $elements = $xpath->query($queryString);
140 :
141 15 : return $elements;
142 :
143 : }
144 :
145 :
146 :
147 :
148 :
149 :
150 :
151 : function getEntryTitleFromDoc($doc) {
152 :
153 11 : $query = "//html/body/h1[@class='title']";
154 11 : $nodeList = $this->XPathQueryToDoc($doc, $query);
155 :
156 11 : foreach($nodeList as $node) {
157 10 : return trim($node->nodeValue);
158 1 : }
159 :
160 1 : return false;
161 : }
162 :
163 :
164 :
165 :
166 :
167 :
168 :
169 :
170 : function getNumberOfPages($doc) {
171 :
172 7 : $query = "//select[@class='pagis']/option";
173 7 : $nodeList = $this->XPathQueryToDoc($doc, $query);
174 :
175 7 : foreach($nodeList as $node) {
176 6 : $totalPageNum = $node->nodeValue;
177 7 : }
178 :
179 7 : return (int) $totalPageNum;
180 : }
181 :
182 :
183 :
184 :
185 :
186 : function parseAuthorAndDateFromString($string){
187 8 : $trimSpaces = trim($string);
188 8 : $trimmed = trim($trimSpaces, "(");
189 8 : $exploded = explode(")", $trimmed);
190 8 : $content = $exploded[0];
191 :
192 8 : list($author, $dates) = explode(",", $content);
193 8 : list($dateCreated, $dateEdited) = explode("~", $dates);
194 :
195 8 : $author = trim($author);
196 8 : $dateCreated = strtotime( trim( $dateCreated) );
197 8 : $dateEdited = strtotime( trim ( $dateEdited) );
198 :
199 8 : return array($author, $dateCreated, $dateEdited);
200 : }
201 :
202 :
203 :
204 :
205 :
206 :
207 :
208 :
209 : function getContentOfEntriesFromDoc($doc) {
210 10 : if(!$doc) {
211 1 : return false;
212 : }
213 :
214 :
215 9 : $query = "//ol[@id='el']/li";
216 :
217 :
218 9 : $title = $this->getEntryTitleFromDoc($doc);
219 :
220 9 : $nodeList = $this->XPathQueryToDoc($doc, $query);
221 :
222 9 : foreach($nodeList as $node) {
223 8 : $childCount = $node->childNodes->length;
224 :
225 :
226 8 : $lastNode = $node->childNodes->item($childCount-1);
227 8 : list($author, $dateCreated, $dateEdited) = $this->parseAuthorAndDateFromString($lastNode->textContent);
228 :
229 :
230 8 : $node->removeChild ($lastNode );
231 8 : $contentNode = $node;
232 :
233 8 : $content = $contentNode->textContent;
234 :
235 8 : $entryId = $node->getAttribute('id');
236 8 : $entryId = (int) preg_replace ( '/[^0-9]/', '', $entryId );
237 :
238 8 : $order = (int) $node->getAttribute("value");
239 :
240 8 : $results[] = array("entryId"=>$entryId,
241 8 : "title"=>$title,
242 8 : "content"=>$content,
243 8 : "order"=>$order,
244 8 : "author"=>$author,
245 8 : "dateCreated"=>$dateCreated,
246 : "dateEdited"=>$dateEdited
247 8 : );
248 :
249 9 : }
250 :
251 9 : return empty($results)?false:$results;
252 :
253 : }
254 : }
|