PluginProbe ʕ •ᴥ•ʔ
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more / 3.9.0
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more v3.9.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 / EmbedPress / Providers / Twitch.php
embedpress / EmbedPress / Providers Last commit date
Boomplay.php 5 years ago Calendly.php 2 years ago Giphy.php 2 years ago GitHub.php 2 years ago GoogleDocs.php 2 years ago GoogleDrive.php 2 years ago GoogleMaps.php 2 years ago Gumroad.php 2 years ago NRKRadio.php 2 years ago OpenSea.php 3 years ago SelfHosted.php 2 years ago Twitch.php 2 years ago Wrapper.php 2 years ago Youtube.php 2 years ago index.html 7 years ago
Twitch.php
139 lines
1 <?php
2
3 namespace EmbedPress\Providers;
4
5 use Embera\Provider\ProviderAdapter;
6 use Embera\Provider\ProviderInterface;
7 use Embera\Url;
8
9 (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
10
11 /**
12 * Entity responsible to support Twitch embeds.
13 *
14 * @package EmbedPress
15 * @subpackage EmbedPress/Providers
16 * @author EmbedPress <help@embedpress.com>
17 * @copyright Copyright (C) 2023 WPDeveloper. All rights reserved.
18 * @license GPLv3 or later
19 * @since 1.5.0
20 */
21 class Twitch extends ProviderAdapter implements ProviderInterface
22 {
23 /**
24 * The regex which identifies Twitch URLs.
25 *
26 * @since 1.5.0
27 * @access private
28 *
29 * @var string
30 */
31 private $urlRegexPattern = '/http[s]?:\/\/(?:www\.|clips\.)twitch\.tv\/([0-9a-zA-Z\-\_]+)\/?(chat\/?$|[0-9a-z\-\_]*)?/';
32
33 /**
34 * Method that verifies if the embed URL belongs to Twitch.
35 *
36 * @param Url $url
37 * @return boolean
38 * @since 1.5.0
39 *
40 */
41 public function validateUrl(Url $url)
42 {
43 return (bool) preg_match($this->urlRegexPattern, $this->url);
44 }
45
46 /**
47 * Return the type of the embed based on the URL.
48 *
49 * @param $url
50 *
51 * @return string
52 */
53 protected function getType($url)
54 {
55 if (stristr($url, 'clips.twitch.tv')) {
56 return 'clip';
57 }
58
59 if (stristr($url, '/videos/')) {
60 return 'video';
61 }
62
63 if (preg_match('#/chat$#', $url)) {
64 return 'chat';
65 }
66
67 return 'channel';
68 }
69
70 /**
71 * This method fakes an Oembed response.
72 *
73 * @since 1.5.0
74 *
75 * @return array
76 */
77 public function fakeResponse()
78 {
79 $url = $this->getUrl();
80 $providerUrl = 'https://twitch.tv';
81 $src = '';
82
83 if (preg_match("{$this->urlRegexPattern}i", $url, $matches)) {
84 $channelName = $matches[1];
85
86 $type = $this->getType($url);
87
88 // Clip, channel, chat, collection, or video?
89 switch ($type) {
90 case 'clip':
91 $src = 'https://clips.twitch.tv/embed?clip=' . $channelName . '&autoplay=false';
92 $attrs = 'scrolling="no" frameborder="0" allowfullscreen="true"';
93 break;
94
95 case 'video':
96 $channelName = $matches[2];
97 $src = 'https://player.twitch.tv/?video=' . $channelName;
98 $attrs = 'scrolling="no" frameborder="0" allowfullscreen="true"';
99 break;
100
101 case 'channel':
102 $src = 'https://player.twitch.tv/?channel=' . $channelName;
103 $attrs = 'scrolling="no" frameborder="0" allowfullscreen="true"';
104 break;
105
106 case 'chat':
107 $src = 'http://www.twitch.tv/embed/' . $channelName . '/chat';
108 $attrs = 'scrolling="yes" frameborder="0" allowfullscreen="true" id="' . $channelName . '"';
109 break;
110 }
111
112 $width = isset( $this->config['maxwidth']) ? $this->config['maxwidth']: 800;
113 $height = isset( $this->config['maxheight']) ? $this->config['maxheight']: 400;
114
115 $pars_url = wp_parse_url(get_site_url());
116 $src = !empty($pars_url['host'])?$src.'&parent='.$pars_url['host']:$src;
117 $html = '<iframe src="' . $src . '" height="'.$height.'" width="'.$width.'" ' . $attrs . '></iframe>';
118
119 $response = [
120 'type' => $type,
121 'content_id' => $channelName,
122 'provider_name' => 'Twitch',
123 'provider_url' => $providerUrl,
124 'url' => $url,
125 'html' => $html,
126 ];
127 } else {
128 $response = [];
129 }
130
131 return $response;
132 }
133 /** inline @inheritDoc */
134 public function modifyResponse( array $response = [])
135 {
136 return $this->fakeResponse();
137 }
138 }
139