PluginProbe ʕ •ᴥ•ʔ
EmbedPress – PDF Embedder, 3D PDF FlipBook, Google Reviews, YouTube Videos, Upload & Embed PDF documents / 2.0.3
EmbedPress – PDF Embedder, 3D PDF FlipBook, Google Reviews, YouTube Videos, Upload & Embed PDF documents v2.0.3
4.6.0 4.5.6 4.5.5 4.5.4 4.5.3 4.5.2 trunk 1.0.0 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.3.0 1.3.1 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.5.0 1.6.0 1.6.1 1.6.2 1.6.3 1.7.0 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 2.0.0 2.0.1 2.0.2 2.0.3 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.2.0 2.2.1 2.2.2 2.3.0 2.3.1 2.3.2 2.3.3 2.4.0 2.4.1 2.5.0 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.1.3 3.2.0 3.2.1 3.3.0 3.3.1 3.3.2 3.3.3 3.3.4 3.3.5 3.3.6 3.3.7 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.6.8 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 3.9.1 3.9.10 3.9.11 3.9.12 3.9.13 3.9.14 3.9.15 3.9.16 3.9.17 3.9.2 3.9.3 3.9.4 3.9.5 3.9.6 3.9.7 3.9.8 3.9.9 4.0.0 4.0.1 4.0.10 4.0.11 4.0.12 4.0.13 4.0.14 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.0.9 4.1.0 4.1.1 4.1.10 4.1.2 4.1.3 4.1.4 4.1.5 4.1.6 4.1.7 4.1.8 4.1.9 4.2.0 4.2.1 4.2.2 4.2.3 4.2.4 4.2.5 4.2.6 4.2.7 4.2.8 4.2.9 4.3.0 4.3.1 4.4.0 4.4.1 4.4.10 4.4.11 4.4.2 4.4.3 4.4.4 4.4.5 4.4.6 4.4.7 4.4.8 4.4.9 4.5.0 4.5.1
embedpress / vendor / ostraining / embera / Lib / Embera / Providers.php
embedpress / vendor / ostraining / embera / Lib / Embera Last commit date
Adapters 8 years ago Providers 8 years ago Autoload.php 8 years ago Embera.php 8 years ago FakeResponse.php 8 years ago Formatter.php 8 years ago HtmlProcessor.php 8 years ago HttpRequest.php 8 years ago Oembed.php 8 years ago Providers.php 8 years ago Url.php 8 years ago
Providers.php
286 lines
1 <?php
2 /**
3 * Providers.php
4 *
5 * @package Embera
6 * @author Michael Pratt <pratt@hablarmierda.net>
7 * @link http://www.michael-pratt.com/
8 *
9 * For the full copyright and license information, please view the LICENSE
10 * file that was distributed with this source code.
11 */
12
13 namespace Embera;
14
15 /**
16 * Finds and loads Services/Providers based on the
17 * host of a url.
18 */
19 class Providers
20 {
21 /** @var array Configuration Settings */
22 protected $config = array();
23
24 /** @var object instance of \Embera\Oembed*/
25 protected $oembed;
26
27 /** @var array Custom parameters for each host/provider */
28 protected $customParams = array();
29
30 /** @var array Hosts with wildcards, calculated at runtime */
31 protected $wildCardHosts = array();
32
33 /** @var array Massive array with the mapping of host -> provider class relation. */
34 protected $services = array(
35 '23hq.com' => '\Embera\Providers\Hq23',
36 'live.amcharts.com' => '\Embera\Providers\AmCharts',
37 'animatron.com' => '\Embera\Providers\Animatron',
38 'animoto.com' => '\Embera\Providers\Animoto',
39 'on.aol.com' => '\Embera\Providers\AolOn',
40 '5min.com' => '\Embera\Providers\AolOn',
41 'alpha.app.net' => '\Embera\Providers\AppNet',
42 'audiosnaps.com' => '\Embera\Providers\AudioSnaps',
43 'photos.app.net' => '\Embera\Providers\AppNet',
44 'bambuser.com' => '\Embera\Providers\Bambuser',
45 '*.blip.tv' => '\Embera\Providers\BlipTV',
46 'cacoo.com' => '\Embera\Providers\Cacoo',
47 'public.chartblocks.com' => '\Embera\Providers\Chartblocks',
48 'chirb.it' => '\Embera\Providers\Chirbit',
49 'clipland.com' => '\Embera\Providers\Clipland',
50 'clyp.it' => '\Embera\Providers\Clyp',
51 'codepoints.net' => '\Embera\Providers\Codepoints',
52 'circuitlab.com' => '\Embera\Providers\CircuitLab',
53 'collegehumor.com' => '\Embera\Providers\CollegeHumor',
54 'coub.com' => '\Embera\Providers\Coub',
55 'crowdranking.com' => '\Embera\Providers\CrowdRanking',
56 'c9ng.com' => '\Embera\Providers\CrowdRanking',
57 'dailymile.com' => '\Embera\Providers\DailyMile',
58 '*.dailymotion.com' => '\Embera\Providers\DailyMotion',
59 'dai.ly' => '\Embera\Providers\DailyMotion',
60 '*.deviantart.com' => '\Embera\Providers\Deviantart',
61 'fav.me' => '\Embera\Providers\Deviantart',
62 'sta.sh' => '\Embera\Providers\Deviantart',
63 '*.didacte.com' => '\Embera\Providers\Didacte',
64 'dipity.com' => '\Embera\Providers\Dipity',
65 'dotsub.com' => '\Embera\Providers\DotSub',
66 'edocr.com' => '\Embera\Providers\Edocr',
67 'egliseinfo.catholique.fr' => '\Embera\Providers\EgliseInfo',
68 'facebook.com' => '\Embera\Providers\Facebook',
69 'flickr.com' => '\Embera\Providers\Flickr',
70 'flic.kr' => '\Embera\Providers\Flickr',
71 'funnyordie.com' => '\Embera\Providers\FunnyOrDie',
72 'geograph.org.uk' => '\Embera\Providers\GeographUk',
73 'geograph.co.uk' => '\Embera\Providers\GeographUk',
74 'geograph.ie' => '\Embera\Providers\GeographUk',
75 'geo.hlipp.de' => '\Embera\Providers\GeographDe',
76 'geo-en.hlipp.de' => '\Embera\Providers\GeographDe',
77 'germany.geograph.org' => '\Embera\Providers\GeographDe',
78 'channel-islands.geographs.org' => '\Embera\Providers\GeographCI',
79 'channel-islands.geograph.org' => '\Embera\Providers\GeographCI',
80 'channel-islands.geographs.org.gg' => '\Embera\Providers\GeographCI',
81 'channel-islands.geographs.org.je' => '\Embera\Providers\GeographCI',
82 'gettyimages.com' => '\Embera\Providers\GettyImages',
83 'gty.im' => '\Embera\Providers\GettyImages',
84 'gfycat.com' => '\Embera\Providers\Gfycat',
85 'gist.github.com' => '\Embera\Providers\GithubGist',
86 'gmep.org' => '\Embera\Providers\Gmep',
87 'huffduffer.com' => '\Embera\Providers\Huffduffer',
88 'hulu.com' => '\Embera\Providers\Hulu',
89 'ifixit.com' => '\Embera\Providers\IFixIt',
90 'ifttt.com' => '\Embera\Providers\IFTTT',
91 'infogr.am' => '\Embera\Providers\Infogram',
92 'instagram.com' => '\Embera\Providers\Instagram',
93 'instagr.am' => '\Embera\Providers\Instagram',
94 'issuu.com' => '\Embera\Providers\Issuu',
95 'kickstarter.com' => '\Embera\Providers\Kickstarter',
96 'learningapps.org' => '\Embera\Providers\LearningApps',
97 'meetup.com' => '\Embera\Providers\Meetup',
98 'meetu.ps' => '\Embera\Providers\Meetup',
99 'mixcloud.com' => '\Embera\Providers\MixCloud',
100 'mobypicture.com' => '\Embera\Providers\MobyPicture',
101 'moby.to' => '\Embera\Providers\MobyPicture',
102 'nfb.ca' => '\Embera\Providers\NFB',
103 'mix.office.com' => '\Embera\Providers\Officemix',
104 'official.fm' => '\Embera\Providers\OfficialFM',
105 'oumy.com' => '\Embera\Providers\Oumy',
106 'pastery.net' => '\Embera\Providers\Pastery',
107 '*.polldaddy.com' => '\Embera\Providers\PollDaddy',
108 'polleverywhere.com' => '\Embera\Providers\PollEveryWhere',
109 'portfolium.com' => '\Embera\Providers\Portfolium',
110 'rapidengage.com' => '\Embera\Providers\Rapidengage',
111 'rdio.com' => '\Embera\Providers\Rdio',
112 'rd.io' => '\Embera\Providers\Rdio',
113 'releasewire.com' => '\Embera\Providers\ReleaseWire',
114 'rwire.com' => '\Embera\Providers\ReleaseWire',
115 'repubhub.icopyright.net' => '\Embera\Providers\RepubHub',
116 'reverbnation.com' => '\Embera\Providers\Reverbnation',
117 'revision3.com' => '\Embera\Providers\Revision3',
118 'roomshare.jp' => '\Embera\Providers\Roomshare',
119 'rutube.ru' => '\Embera\Providers\Rutube',
120 'videos.sapo.pt' => '\Embera\Providers\Sapo',
121 'screenr.com' => '\Embera\Providers\Screenr',
122 'scribd.com' => '\Embera\Providers\Scribd',
123 'shortnote.jp' => '\Embera\Providers\ShortNote',
124 '*.shoudio.com' => '\Embera\Providers\Shoudio',
125 '*.shoud.io' => '\Embera\Providers\Shoudio',
126 'showtheway.io' => '\Embera\Providers\Showtheway',
127 '*.silk.co' => '\Embera\Providers\Silk',
128 'sketchfab.com' => '\Embera\Providers\Sketchfab',
129 '*.slideshare.net' => '\Embera\Providers\SlideShare',
130 '*.soundcloud.com' => '\Embera\Providers\SoundCloud',
131 'speakerdeck.com' => '\Embera\Providers\Speakerdeck',
132 '*.spotify.com' => '\Embera\Providers\Spotify',
133 'spoti.fi' => '\Embera\Providers\Spotify',
134 'streamable.com' => '\Embera\Providers\Streamable',
135 'content.streamonecloud.net' => '\Embera\Providers\StreamOneCloud',
136 'sway.com' => '\Embera\Providers\Sway',
137 'ted.com' => '\Embera\Providers\Ted',
138 'theysaidso.com' => '\Embera\Providers\TheySaidSo',
139 'twitter.com' => '\Embera\Providers\Twitter',
140 'ustream.tv' => '\Embera\Providers\Ustream',
141 'ustream.com' => '\Embera\Providers\Ustream',
142 'verse.media' => '\Embera\Providers\Verse',
143 'viddler.com' => '\Embera\Providers\Viddler',
144 'videofork.com' => '\Embera\Providers\VideoFork',
145 'videojug.com' => '\Embera\Providers\VideoJug',
146 'vevo.com' => '\Embera\Providers\Vevo',
147 'vimeo.com' => '\Embera\Providers\Vimeo',
148 'wordpress.tv' => '\Embera\Providers\WordpressTV',
149 'blog.wordpress.tv' => '\Embera\Providers\WordpressTV',
150 'yfrog.com' => '\Embera\Providers\YFrog',
151 'yfrog.us' => '\Embera\Providers\YFrog',
152 'twitter.yfrog.com' => '\Embera\Providers\YFrog',
153 'video.yandex.ru' => '\Embera\Providers\Yandex',
154 'm.youtube.com' => '\Embera\Providers\Youtube',
155 'youtube.com' => '\Embera\Providers\Youtube',
156 'youtu.be' => '\Embera\Providers\Youtube',
157 'vine.co' => '\Embera\Providers\Vine',
158 );
159
160 /**
161 * Construct
162 *
163 * @param array $config Associative array with configuration options
164 * @param object $oembed Instance of \Embera\Oembed
165 */
166 public function __construct(array $config = array(), \Embera\Oembed $oembed)
167 {
168 $this->config = array_replace_recursive(array(
169 'params' => array(),
170 'custom_params' => array(),
171 'fake' => array()
172 ), $config);
173
174 $this->oembed = $oembed;
175 }
176
177 /**
178 * Finds services for the given $urls.
179 *
180 * @param array $urls An array with all the available urls
181 * @return array An Array with loaded services
182 */
183 protected function findServices(array $urls = array())
184 {
185 $return = array();
186 $this->extractCustomParams($this->config['custom_params']);
187 foreach (array_unique($urls) as $u) {
188
189 try {
190 $host = $this->getHost($u);
191 if (isset($this->services[$host])) {
192 $provider = new \ReflectionClass($this->services[$host]);
193 $return[$u] = $provider->newInstance($u, $this->config, $this->oembed);
194
195 if (isset($this->customParams[$host])) {
196 $return[$u]->appendParams($this->customParams[$host]);
197 }
198 }
199 } catch (\Exception $e) {
200 //echo $e->getMessage() . PHP_EOL;
201 }
202 }
203
204 return $return;
205 }
206
207 /**
208 * Adds a new Provider into the service map
209 *
210 * @param string $host The host for the map
211 * @param string|object $class The class or object that should manage the provider
212 * @param array $params Custom parameters that should be sent in the url for this Provider
213 */
214 public function addProvider($host, $class, array $params = array())
215 {
216 $host = preg_replace('~^(?:www)\.~i', '', strtolower($host));
217 $this->services[$host] = $class;
218 $this->customParams[$host] = $params;
219 }
220
221 /**
222 * Gets a normalized host for the given $url
223 *
224 * @param string $url
225 * @return string
226 *
227 * @throws InvalidArgumentException when the url seems to be invalid
228 */
229 protected function getHost($url)
230 {
231 $data = parse_url($url);
232 if (empty($data['host'])) {
233 throw new \InvalidArgumentException('The Url: ' . $url . ' seems to be invalid');
234 }
235
236 $host = preg_replace('~^(?:www|player)\.~i', '', strtolower($data['host']));
237 if (isset($this->services[$host])) {
238 return $host;
239 } else if (isset($this->services['*.' . $host])) {
240 return '*.' . $host;
241 } else if (!empty($this->wildCardHosts)) {
242 $trans = array('\*' => '(?:.*)');
243 foreach ($this->wildCardHosts as $value) {
244 $regex = strtr(preg_quote($value, '~'), $trans);
245 if (preg_match('~' . $regex . '~i', $host)) {
246 return $value;
247 }
248 }
249 }
250
251 return $host;
252 }
253
254 /**
255 * Extracts custom parameters for a Provider
256 *
257 * @param array $params
258 * @return array
259 */
260 protected function extractCustomParams(array $params = array())
261 {
262 foreach ($params as $name => $values) {
263 foreach ($this->services as $host => $service) {
264 if (preg_match('~' . preg_quote($name, '~') . '~i', $service)) {
265 $this->customParams[$host] = (array) $values;
266 }
267 }
268 }
269 }
270
271 /**
272 * Returns an array with all valid services found.
273 *
274 * @param array|string $urls An array with urls or a url string
275 * @return array
276 */
277 public function getAll($urls)
278 {
279 $this->wildCardHosts = array_filter(array_keys($this->services), function($key) {
280 return (strpos($key, '*') !== false);
281 });
282
283 return $this->findServices((array) $urls);
284 }
285 }
286