PluginProbe ʕ •ᴥ•ʔ
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more / 1.4.2
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more v1.4.2
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 / library / ostraining / embera / Lib / Embera / Providers.php
embedpress / library / ostraining / embera / Lib / Embera Last commit date
Adapters 9 years ago Providers 9 years ago Autoload.php 9 years ago Embera.php 9 years ago FakeResponse.php 9 years ago Formatter.php 9 years ago HttpRequest.php 9 years ago Oembed.php 9 years ago Providers.php 9 years ago Url.php 9 years ago
Providers.php
285 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 'clyp.it' => '\Embera\Providers\Clyp',
50 'codepoints.net' => '\Embera\Providers\Codepoints',
51 'circuitlab.com' => '\Embera\Providers\CircuitLab',
52 'collegehumor.com' => '\Embera\Providers\CollegeHumor',
53 'coub.com' => '\Embera\Providers\Coub',
54 'crowdranking.com' => '\Embera\Providers\CrowdRanking',
55 'c9ng.com' => '\Embera\Providers\CrowdRanking',
56 'dailymile.com' => '\Embera\Providers\DailyMile',
57 '*.dailymotion.com' => '\Embera\Providers\DailyMotion',
58 'dai.ly' => '\Embera\Providers\DailyMotion',
59 '*.deviantart.com' => '\Embera\Providers\Deviantart',
60 'fav.me' => '\Embera\Providers\Deviantart',
61 'sta.sh' => '\Embera\Providers\Deviantart',
62 'dipity.com' => '\Embera\Providers\Dipity',
63 'dotsub.com' => '\Embera\Providers\DotSub',
64 'edocr.com' => '\Embera\Providers\Edocr',
65 'egliseinfo.catholique.fr' => '\Embera\Providers\EgliseInfo',
66 'facebook.com' => '\Embera\Providers\Facebook',
67 'flickr.com' => '\Embera\Providers\Flickr',
68 'flic.kr' => '\Embera\Providers\Flickr',
69 'funnyordie.com' => '\Embera\Providers\FunnyOrDie',
70 'geograph.org.uk' => '\Embera\Providers\GeographUk',
71 'geograph.co.uk' => '\Embera\Providers\GeographUk',
72 'geograph.ie' => '\Embera\Providers\GeographUk',
73 'geo.hlipp.de' => '\Embera\Providers\GeographDe',
74 'geo-en.hlipp.de' => '\Embera\Providers\GeographDe',
75 'germany.geograph.org' => '\Embera\Providers\GeographDe',
76 'channel-islands.geographs.org' => '\Embera\Providers\GeographCI',
77 'channel-islands.geograph.org' => '\Embera\Providers\GeographCI',
78 'channel-islands.geographs.org.gg' => '\Embera\Providers\GeographCI',
79 'channel-islands.geographs.org.je' => '\Embera\Providers\GeographCI',
80 'gettyimages.com' => '\Embera\Providers\GettyImages',
81 'gty.im' => '\Embera\Providers\GettyImages',
82 'gfycat.com' => '\Embera\Providers\Gfycat',
83 'gist.github.com' => '\Embera\Providers\GithubGist',
84 'gmep.org' => '\Embera\Providers\Gmep',
85 'huffduffer.com' => '\Embera\Providers\Huffduffer',
86 'hulu.com' => '\Embera\Providers\Hulu',
87 'ifixit.com' => '\Embera\Providers\IFixIt',
88 'ifttt.com' => '\Embera\Providers\IFTTT',
89 'infogr.am' => '\Embera\Providers\Infogram',
90 'instagram.com' => '\Embera\Providers\Instagram',
91 'instagr.am' => '\Embera\Providers\Instagram',
92 'issuu.com' => '\Embera\Providers\Issuu',
93 'kickstarter.com' => '\Embera\Providers\Kickstarter',
94 'learningapps.org' => '\Embera\Providers\LearningApps',
95 'meetup.com' => '\Embera\Providers\Meetup',
96 'meetu.ps' => '\Embera\Providers\Meetup',
97 'mixcloud.com' => '\Embera\Providers\MixCloud',
98 'mobypicture.com' => '\Embera\Providers\MobyPicture',
99 'moby.to' => '\Embera\Providers\MobyPicture',
100 'nfb.ca' => '\Embera\Providers\NFB',
101 'mix.office.com' => '\Embera\Providers\Officemix',
102 'official.fm' => '\Embera\Providers\OfficialFM',
103 'oumy.com' => '\Embera\Providers\Oumy',
104 'pastery.net' => '\Embera\Providers\Pastery',
105 '*.polldaddy.com' => '\Embera\Providers\PollDaddy',
106 'polleverywhere.com' => '\Embera\Providers\PollEveryWhere',
107 'portfolium.com' => '\Embera\Providers\Portfolium',
108 'rapidengage.com' => '\Embera\Providers\Rapidengage',
109 'rdio.com' => '\Embera\Providers\Rdio',
110 'rd.io' => '\Embera\Providers\Rdio',
111 'releasewire.com' => '\Embera\Providers\ReleaseWire',
112 'rwire.com' => '\Embera\Providers\ReleaseWire',
113 'repubhub.icopyright.net' => '\Embera\Providers\RepubHub',
114 'reverbnation.com' => '\Embera\Providers\Reverbnation',
115 'revision3.com' => '\Embera\Providers\Revision3',
116 'roomshare.jp' => '\Embera\Providers\Roomshare',
117 'rutube.ru' => '\Embera\Providers\Rutube',
118 'videos.sapo.pt' => '\Embera\Providers\Sapo',
119 'screenr.com' => '\Embera\Providers\Screenr',
120 'scribd.com' => '\Embera\Providers\Scribd',
121 'shortnote.jp' => '\Embera\Providers\ShortNote',
122 '*.shoudio.com' => '\Embera\Providers\Shoudio',
123 '*.shoud.io' => '\Embera\Providers\Shoudio',
124 'showtheway.io' => '\Embera\Providers\Showtheway',
125 '*.silk.co' => '\Embera\Providers\Silk',
126 'sketchfab.com' => '\Embera\Providers\Sketchfab',
127 '*.slideshare.net' => '\Embera\Providers\SlideShare',
128 '*.soundcloud.com' => '\Embera\Providers\SoundCloud',
129 'speakerdeck.com' => '\Embera\Providers\Speakerdeck',
130 '*.spotify.com' => '\Embera\Providers\Spotify',
131 'spoti.fi' => '\Embera\Providers\Spotify',
132 'sway.com' => '\Embera\Providers\Sway',
133 'ted.com' => '\Embera\Providers\Ted',
134 'theysaidso.com' => '\Embera\Providers\TheySaidSo',
135 'twitter.com' => '\Embera\Providers\Twitter',
136 'ustream.tv' => '\Embera\Providers\Ustream',
137 'ustream.com' => '\Embera\Providers\Ustream',
138 'verse.media' => '\Embera\Providers\Verse',
139 'viddler.com' => '\Embera\Providers\Viddler',
140 'videofork.com' => '\Embera\Providers\VideoFork',
141 'videojug.com' => '\Embera\Providers\VideoJug',
142 'vimeo.com' => '\Embera\Providers\Vimeo',
143 'wordpress.tv' => '\Embera\Providers\WordpressTV',
144 'blog.wordpress.tv' => '\Embera\Providers\WordpressTV',
145 'yfrog.com' => '\Embera\Providers\YFrog',
146 'yfrog.us' => '\Embera\Providers\YFrog',
147 'twitter.yfrog.com' => '\Embera\Providers\YFrog',
148 'video.yandex.ru' => '\Embera\Providers\Yandex',
149 'm.youtube.com' => '\Embera\Providers\Youtube',
150 'youtube.com' => '\Embera\Providers\Youtube',
151 'youtu.be' => '\Embera\Providers\Youtube',
152 'vine.co' => '\Embera\Providers\Vine',
153 );
154
155 /**
156 * Construct
157 *
158 * @param array $config Associative array with configuration options
159 * @param object $oembed Instance of \Embera\Oembed
160 * @return void
161 */
162 public function __construct(array $config = array(), \Embera\Oembed $oembed)
163 {
164 $this->config = array_replace_recursive(array(
165 'params' => array(),
166 'custom_params' => array(),
167 'fake' => array()
168 ), $config);
169
170 $this->oembed = $oembed;
171 }
172
173 /**
174 * Finds services for the given $urls.
175 *
176 * @param array $urls An array with all the available urls
177 * @return array An Array with loaded services
178 */
179 protected function findServices(array $urls = array())
180 {
181 $return = array();
182 $this->extractCustomParams($this->config['custom_params']);
183 foreach (array_unique($urls) as $u) {
184
185 try {
186 $host = $this->getHost($u);
187 if (isset($this->services[$host])) {
188 $provider = new \ReflectionClass($this->services[$host]);
189 $return[$u] = $provider->newInstance($u, $this->config, $this->oembed);
190
191 if (isset($this->customParams[$host])) {
192 $return[$u]->appendParams($this->customParams[$host]);
193 }
194 }
195 } catch (\Exception $e) {
196 //echo $e->getMessage() . PHP_EOL;
197 }
198 }
199
200 return $return;
201 }
202
203 /**
204 * Adds a new Provider into the service map
205 *
206 * @param string $host The host for the map
207 * @param string|object $class The class or object that should manage the provider
208 * @param array $params Custom parameters that should be sent in the url for this Provider
209 * @return void
210 */
211 public function addProvider($host, $class, array $params = array())
212 {
213 $host = preg_replace('~^(?:www)\.~i', '', strtolower($host));
214 $this->services[$host] = $class;
215 $this->customParams[$host] = $params;
216 }
217
218 /**
219 * Gets a normalized host for the given $url
220 *
221 * @param string $url
222 * @return string
223 *
224 * @throws InvalidArgumentException when the url seems to be invalid
225 */
226 protected function getHost($url)
227 {
228 $data = parse_url($url);
229 if (empty($data['host'])) {
230 throw new \InvalidArgumentException('The Url: ' . $url . ' seems to be invalid');
231 }
232
233 $host = preg_replace('~^(?:www|player)\.~i', '', strtolower($data['host']));
234 if (isset($this->services[$host])) {
235 return $host;
236 } else if (isset($this->services['*.' . $host])) {
237 return '*.' . $host;
238 } else if (!empty($this->wildCardHosts)) {
239 $trans = array('\*' => '(?:.*)');
240 foreach ($this->wildCardHosts as $value) {
241 $regex = strtr(preg_quote($value, '~'), $trans);
242 if (preg_match('~' . $regex . '~i', $host)) {
243 return $value;
244 }
245 }
246 }
247
248 return $host;
249 }
250
251 /**
252 * Extracts custom parameters for a Provider
253 *
254 * @param array $params
255 * @return array
256 */
257 protected function extractCustomParams(array $params = array())
258 {
259 foreach ($params as $name => $values) {
260 foreach ($this->services as $host => $service) {
261 if (preg_match('~' . preg_quote($name, '~') . '~i', $service)) {
262 $this->customParams[$host] = (array) $values;
263 }
264 }
265 }
266 }
267
268 /**
269 * Returns an array with all valid services found.
270 *
271 * @param array|string $urls An array with urls or a url string
272 * @return array
273 */
274 public function getAll($urls)
275 {
276 $this->wildCardHosts = array_filter(array_keys($this->services), function($key) {
277 return (strpos($key, '*') !== false);
278 });
279
280 return $this->findServices((array) $urls);
281 }
282 }
283
284 ?>
285