PluginProbe ʕ •ᴥ•ʔ
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more / 4.0.8
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more v4.0.8
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 / wpdevelopers / embera / src / Embera / Http / OembedClient.php
embedpress / vendor / wpdevelopers / embera / src / Embera / Http Last commit date
HttpClient.php 5 years ago HttpClientCache.php 5 years ago HttpClientInterface.php 5 years ago OembedClient.php 5 years ago
OembedClient.php
153 lines
1 <?php
2 /**
3 * OembedClient.php
4 *
5 * @package Embera
6 * @author Michael Pratt <yo@michael-pratt.com>
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\Http;
14
15 use Embera\Embera;
16 use Embera\Http;
17 use Embera\Provider\ProviderInterface;
18
19 /**
20 * This class manages requests and responses
21 * from an Oembed Endpoint.
22 *
23 * TODO: Support xml responses
24 */
25 class OembedClient
26 {
27 /** @var array Configuration settings */
28 protected $config = [];
29
30 /** @var Http\HttpClient */
31 protected $http;
32
33 /**
34 * Construct
35 *
36 * @param array $config
37 * @param Http\HttpClient $http
38 * @return void
39 */
40 public function __construct($config, HttpClientInterface $http)
41 {
42 $this->config = $config;
43 $this->http = $http;
44 }
45
46 /**
47 * Gets the response from a given providerObject
48 *
49 * @param ProviderInterface $provider
50 * @return array
51 */
52 public function getResponseFrom(ProviderInterface $provider)
53 {
54 if ($this->config['fake_responses'] == Embera::ONLY_FAKE_RESPONSES) {
55 $response = $this->processFakeResponse($provider->getProviderName(), $provider->getFakeResponse());
56 } else {
57 try {
58 $response = $this->lookup($provider);
59 }catch (\Exception $e) {
60 $response['error'] = $e->getMessage();
61 }
62 }
63
64 return $provider->modifyResponse($response);
65 }
66
67 /**
68 * Executes a http request to a url created by the $provider
69 *
70 * @param ProviderInterface $provider
71 * @return array
72 *
73 * @throws \Exception From the Http object only if there is no way
74 * to perform the request or if the response from
75 * the server is empty/invalid.
76 */
77 protected function lookup(ProviderInterface $provider)
78 {
79 $url = $this->constructUrl($provider->getEndpoint(), $provider->getParams());
80 $response = $this->http->fetch($url);
81 $json = json_decode($response, true);
82
83 if ($json) {
84 return array_merge($json, [
85 'embera_using_fake_response' => 0,
86 'embera_provider_name' => $provider->getProviderName(),
87 ]);
88 }
89
90 if ($this->config['fake_responses'] == Embera::ALLOW_FAKE_RESPONSES) {
91 return $this->processFakeResponse($provider->getProviderName(), $provider->getFakeResponse());
92 }
93
94 return [];
95 }
96
97 /**
98 * Builds a valid Oembed query string based on the given parameters,
99 * Since this method uses the http_build_query function, there is no
100 * need to pass urlencoded parameters, http_build_query already does
101 * this for us.
102 *
103 * @param string $endpoint The Url to the Oembed endpoint
104 * @param array $params Parameters for the query string
105 * @return string
106 */
107 protected function constructUrl($endpoint, array $params = array())
108 {
109 return $endpoint . ((strpos($endpoint, '?') === false) ? '?' : '&') . http_build_query(array_filter($params));
110 }
111
112 /**
113 * Builds the fake response.
114 * This replaces placeholders that are present in $config['fake']
115 * into the response array
116 *
117 * @param string $providerName
118 * @param array $response
119 * @return array
120 */
121 protected function processFakeResponse($providerName, array $response)
122 {
123 $defaultValues = [
124 'version' => '1.0',
125 'provider_name' => '',
126 'url' => '',
127 'title' => '',
128 'author_name' => '',
129 'author_url' => '',
130 'cache_age' => 0,
131 'embera_using_fake_response' => 1,
132 'embera_provider_name' => $providerName,
133 ];
134
135 if (!empty($response['html'])) {
136 foreach ($this->config as $key => $v) {
137 if (!is_string($v) && !is_numeric($v)) {
138 continue;
139 }
140
141 if (in_array($key, ['maxwidth', 'maxheight'])) {
142 $key = str_replace('max', '', $key);
143 }
144
145 $response['html'] = str_replace('{' . $key. '}', $v, $response['html']);
146 }
147 }
148
149 return array_merge($defaultValues, $response);
150 }
151
152 }
153