@@ -50,7 +50,25 @@ class OpenGraph implements Iterator
50
50
* @return OpenGraph
51
51
*/
52
52
static public function fetch ($ URI ) {
53
- return self ::_parse (file_get_contents ($ URI ));
53
+ $ curl = curl_init ($ URI );
54
+
55
+ curl_setopt ($ curl , CURLOPT_FAILONERROR , true );
56
+ curl_setopt ($ curl , CURLOPT_FOLLOWLOCATION , true );
57
+ curl_setopt ($ curl , CURLOPT_RETURNTRANSFER , true );
58
+ curl_setopt ($ curl , CURLOPT_TIMEOUT , 15 );
59
+ curl_setopt ($ curl , CURLOPT_SSL_VERIFYHOST , false );
60
+ curl_setopt ($ curl , CURLOPT_SSL_VERIFYPEER , false );
61
+ curl_setopt ($ curl , CURLOPT_USERAGENT , $ _SERVER ['HTTP_USER_AGENT ' ]);
62
+
63
+ $ response = curl_exec ($ curl );
64
+
65
+ curl_close ($ curl );
66
+
67
+ if (!empty ($ response )) {
68
+ return self ::_parse ($ response );
69
+ } else {
70
+ return false ;
71
+ }
54
72
}
55
73
56
74
/**
@@ -107,6 +125,20 @@ static private function _parse($HTML) {
107
125
$ page ->_values ['description ' ] = $ nonOgDescription ;
108
126
}
109
127
128
+ //Fallback to use image_src if ogp::image isn't set.
129
+ if (!isset ($ page ->values ['image ' ])) {
130
+ $ domxpath = new DOMXPath ($ doc );
131
+ $ elements = $ domxpath ->query ("//link[@rel='image_src'] " );
132
+
133
+ if ($ elements ->length > 0 ) {
134
+ $ domattr = $ elements ->item (0 )->attributes ->getNamedItem ('href ' );
135
+ if ($ domattr ) {
136
+ $ page ->_values ['image ' ] = $ domattr ->value ;
137
+ $ page ->_values ['image_src ' ] = $ domattr ->value ;
138
+ }
139
+ }
140
+ }
141
+
110
142
if (empty ($ page ->_values )) { return false ; }
111
143
112
144
return $ page ;
@@ -178,4 +210,4 @@ public function current() { return current($this->_values); }
178
210
public function key () { return key ($ this ->_values ); }
179
211
public function next () { next ($ this ->_values ); ++$ this ->_position ; }
180
212
public function valid () { return $ this ->_position < sizeof ($ this ->_values ); }
181
- }
213
+ }
0 commit comments