Skip to content

Commit 6657ae6

Browse files
authored
Merge pull request #45 from cidilabs/checkYoutubeCredits
Check youtube credits/Added provider name concept
2 parents f66c584 + 9229986 commit 6657ae6

File tree

6 files changed

+64
-3
lines changed

6 files changed

+64
-3
lines changed

src/Rule/VideoScan.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class VideoScan extends BaseRule
1414
const FAILED_CONNECTION = -1;
1515
const FAILED_CAPTIONS = 0;
1616
const SUCCESSFUL_CAPTIONS = 1;
17+
const NO_API_CREDITS = -2;
1718

1819
public $youtube = null;
1920
public $vimeo = null;
@@ -40,8 +41,13 @@ public function check()
4041

4142
$captions = $this->getCaptionData($url, $provider);
4243

44+
if (self::NO_API_CREDITS === $captions) {
45+
$this->setError("{$provider->getName()} videos cannot be scanned at this time. Please try again at a later time.");
46+
continue;
47+
}
48+
4349
if (self::FAILED_CONNECTION === $captions) {
44-
$this->setError('Failed provider API connection.');
50+
$this->setError("Failed {$provider->getName()} API connection.");
4551
continue;
4652
}
4753

src/Video/Kaltura.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ class Kaltura {
1515
const KALTURA_FAILED_CONNECTION = -1;
1616
const KALTURA_FAIL = 0;
1717
const KALTURA_SUCCESS = 1;
18+
const PROVIDER_NAME = 'Kaltura';
1819

1920
private $client;
2021
private $language;
@@ -127,4 +128,8 @@ function getVideoData($link_url)
127128
return !isset($result->objects) ? $result->objects : self::KALTURA_FAILED_CONNECTION;
128129
}
129130

131+
public function getName() {
132+
return self::PROVIDER_NAME;
133+
}
134+
130135
}

src/Video/Vimeo.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ class Vimeo
99
const VIMEO_FAILED_CONNECTION = -1;
1010
const VIMEO_FAIL = 0;
1111
const VIMEO_SUCCESS = 1;
12+
const PROVIDER_NAME = "Vimeo";
1213

1314
private $regex = '@vimeo\.com/[^0-9]*([0-9]{7,9})@i';
1415
private $search_url = 'https://api.vimeo.com/videos/';
@@ -94,4 +95,8 @@ function getVideoData($link_url)
9495

9596
return isset($result->data) ? $result->data : self::VIMEO_FAILED_CONNECTION;
9697
}
98+
99+
public function getName() {
100+
return self::PROVIDER_NAME;
101+
}
97102
}

src/Video/Youtube.php

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ class Youtube
99
const YOUTUBE_FAILED_REQUEST = -1;
1010
const YOUTUBE_FAIL = 0;
1111
const YOUTUBE_SUCCESS = 1;
12+
const YOUTUBE_NO_CREDITS = -2;
13+
const PROVIDER_NAME = 'Youtube';
1214

1315
private $regex = array(
1416
'@youtube\.com/embed/([^"\&\? ]+)@i',
@@ -127,17 +129,26 @@ function getVideoData($link_url)
127129
$url = $this->search_url . $youtube_id . '&key=' . $this->api_key;
128130
$response = $this->client->request('GET', $url);
129131

132+
$result = json_decode($response->getBody());
133+
130134
// validate response
131135
if ($response->getStatusCode() >= 400) {
136+
foreach ($result->error->errors as $error) {
137+
if ($error->reason === "quotaExceeded") {
138+
return self::YOUTUBE_NO_CREDITS;
139+
}
140+
}
132141
return self::YOUTUBE_FAILED_REQUEST;
133142
}
134143

135-
$result = json_decode($response->getBody());
136-
137144
if (!empty($result->error)) {
138145
return self::YOUTUBE_FAILED_REQUEST;
139146
}
140147

141148
return isset($result->items) ? $result->items : self::YOUTUBE_FAILED_REQUEST;
142149
}
150+
151+
public function getName() {
152+
return self::PROVIDER_NAME;
153+
}
143154
}

tests/VideoScanTest.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,4 +184,30 @@ public function testCheckInvalidKaltura()
184184
$this->assertEquals(0, $ruleMock->check(), 'No issues when API connection fails.');
185185
$this->assertCount(1, $ruleMock->getErrors(), 'One error found when API connection fails.');
186186
}
187+
188+
public function testCheckNoApiCreditsYoutube()
189+
{
190+
$html = '<embed type="video/webm" src="https://www.youtube.com/watch?v=1xZxxVlu7BM" width="400" height="300">';
191+
$dom = new \DOMDocument('1.0', 'utf-8');
192+
$dom->loadHTML($html);
193+
$options = [
194+
'vimeoApiKey' => 'test',
195+
'youtubeApiKey' => 'test',
196+
'kalturaApiKey' => 'test',
197+
'kalturaUsername' => 'test'
198+
];
199+
$response = VideoScan::NO_API_CREDITS;
200+
201+
$ruleMock = $this->getMockBuilder(VideoScan::class)
202+
->setConstructorArgs([$dom, $options])
203+
->onlyMethods(array('getCaptionData'))
204+
->getMock();
205+
206+
$ruleMock->expects($this->once())
207+
->method('getCaptionData')
208+
->will($this->returnValue($response));
209+
210+
$this->assertEquals(0, $ruleMock->check(), 'No issues when credits run out.');
211+
$this->assertCount(1, $ruleMock->getErrors(), 'One error found when credits run out.');
212+
}
187213
}

tests/YoutubeTest.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,4 +163,12 @@ public function testCaptionsAutoGeneratedSuccess(){
163163
$this->assertEquals($youtube->captionsAutoGenerated($response), YouTube::YOUTUBE_SUCCESS);
164164
}
165165

166+
// public function testNoApiCredits(){
167+
// $client = new \GuzzleHttp\Client(['http_errors' => false]);
168+
// $youtube = new Youtube($client, 'en', 'AIzaSyChmQQw6pZ1H2j4bqid4Ael46mYaNSy7Jg');
169+
// $url = "https://www.youtube.com/watch?v=WTGn88ZL-pg";
170+
171+
// $this->assertEquals($youtube->getVideoData($url), YouTube::YOUTUBE_NO_CREDITS);
172+
// }
173+
166174
}

0 commit comments

Comments
 (0)