From b96afb00c04bd67eb0597d5229616db911fd1779 Mon Sep 17 00:00:00 2001 From: CupOfTea696 Date: Sun, 8 Mar 2015 13:20:31 +0000 Subject: [PATCH] Giant load of bugfixes --- src/CupOfTea/YouTube/API/Provider.php | 33 +++++++++--- .../YouTube/API/Resource/Activities.php | 5 +- .../YouTube/API/Resource/Channels.php | 16 +++--- .../YouTube/API/Resource/Channels/Banners.php | 5 +- .../API/Resource/Channels/Sections.php | 5 +- .../YouTube/API/Resource/GuideCategories.php | 5 +- .../YouTube/API/Resource/Playlists.php | 14 ++--- .../YouTube/API/Resource/Playlists/Items.php | 5 +- src/CupOfTea/YouTube/API/Resource/Search.php | 5 +- .../YouTube/API/Resource/Subscriptions.php | 5 +- .../YouTube/API/Resource/Thumbnails.php | 5 +- src/CupOfTea/YouTube/API/Resource/Videos.php | 14 ++--- .../API/Resource/Videos/Categories.php | 5 +- .../YouTube/API/Resource/Watermarks.php | 5 +- src/CupOfTea/YouTube/API/Resource/i18n.php | 12 +++-- .../YouTube/API/Resource/i18n/Languages.php | 5 +- .../YouTube/API/Resource/i18n/Regions.php | 5 +- src/CupOfTea/YouTube/Abstraction/Resource.php | 53 +++++++++++++++---- src/CupOfTea/YouTube/Contracts/Resource.php | 30 ----------- src/CupOfTea/YouTube/Traits/DeleteMethod.php | 5 +- .../YouTube/Traits/GetRatingMethod.php | 5 +- .../{Contracts => Traits}/HasSubResources.php | 24 ++++----- src/CupOfTea/YouTube/Traits/InsertMethod.php | 5 +- src/CupOfTea/YouTube/Traits/ListMethod.php | 5 +- src/CupOfTea/YouTube/Traits/RateMethod.php | 3 +- src/CupOfTea/YouTube/Traits/SetMethod.php | 3 +- src/CupOfTea/YouTube/Traits/UnsetMethod.php | 3 +- src/CupOfTea/YouTube/Traits/UpdateMethod.php | 5 +- 28 files changed, 150 insertions(+), 140 deletions(-) delete mode 100644 src/CupOfTea/YouTube/Contracts/Resource.php rename src/CupOfTea/YouTube/{Contracts => Traits}/HasSubResources.php (67%) diff --git a/src/CupOfTea/YouTube/API/Provider.php b/src/CupOfTea/YouTube/API/Provider.php index a25bfe6..79e0cc5 100644 --- a/src/CupOfTea/YouTube/API/Provider.php +++ b/src/CupOfTea/YouTube/API/Provider.php @@ -4,9 +4,13 @@ use Illuminate\Http\Request; use CupOfTea\YouTube\Models\RefreshToken; use Symfony\Component\HttpFoundation\RedirectResponse; +use CupOfTea\YouTube\Exceptions\ResourceNotFoundException; use CupOfTea\YouTube\Contracts\Provider as ProviderContract; class Provider implements ProviderContract { + + const PACKAGE = 'CupOfTea/YouTube'; + const VERSION = '0.1.1-alpha'; /** * Available Resources for this API. @@ -96,7 +100,7 @@ class Provider implements ProviderContract { */ public function __construct(Request $request, $clientId, $clientSecret, $cfg) { - $this->request = $request; + $this->request = $request; $this->session = $request->getSession(); $this->clientId = $clientId; $this->clientSecret = $clientSecret; @@ -446,10 +450,25 @@ protected function getCode() * * @return \GuzzleHttp\Client */ - protected function getHttpClient($base_url = false){ + public function getHttpClient($base_url = false){ $base_url = $base_url ? $base_url : $this->base_url; - return new \GuzzleHttp\Client(['base_url' => $this->base_url]); + $defaultAgent = self::PACKAGE . '/' . self::VERSION; + $defaultAgent .= ' Guzzle/' . \GuzzleHttp\ClientInterface::VERSION; + if(extension_loaded('curl')) + $defaultAgent .= ' curl/' . curl_version()['version']; + $defaultAgent .= ' PHP/' . PHP_VERSION; + $defaultAgent .= ' (gzip)'; + + return new \GuzzleHttp\Client([ + 'base_url' => $base_url, + 'defaults' => [ + 'headers' => [ + 'User-Agent' => $defaultAgent, + 'Accept-Encoding' => 'gzip', + ], + ], + ]); } /** @@ -474,14 +493,14 @@ public function setRequest(Request $request) */ public function __call($resource, $a){ $resource = strtolower($resource); - if(!array_get($resource, $this->available_resources)) + if(!in_array($resource, $this->available_resources)) throw new ResourceNotFoundException(ucfirst($resource)); - if($instance = array_get($resource, $this->resources)) + if($instance = in_array($resource, $this->resources)) return $instance; - $instance = 'Resource\\' . ucfirst($resource); - return $this->resources[$resource] = new $instance($this); + $instance = __NAMESPACE__ . '\\Resource\\' . ucfirst($resource); + return $this->resources[$resource] = new $instance($this, $this->cfg); } /*************************/ diff --git a/src/CupOfTea/YouTube/API/Resource/Activities.php b/src/CupOfTea/YouTube/API/Resource/Activities.php index 5e92e50..4c14ee5 100644 --- a/src/CupOfTea/YouTube/API/Resource/Activities.php +++ b/src/CupOfTea/YouTube/API/Resource/Activities.php @@ -1,13 +1,12 @@ false]; + protected $parameters = ['prettyPrint' => 'false']; /** * Metadata on all existing methods in this API @@ -55,12 +68,13 @@ abstract class Resource implements ArrayAccess, ResourceContract { * @param Provider $Provider * @return void */ - public function __contruct(Provider &$Provider){ + public function __construct(Provider &$Provider, $cfg){ $this->Provider = $Provider; + $this->cfg = $cfg; } protected function getHttpClient(){ - return $this->Provider->getHttpClient([$this->base_url, ['version', $this->version]]); + return $this->Provider->getHttpClient([$this->base_url, ['version' => $this->version]]); } public function authenticated(){ @@ -83,11 +97,32 @@ public function fields($fields){ } protected function getAllParameters($parameters){ - return array_replace($this->parameters, $parameters); + $params = array_replace($this->parameters, $parameters); + $params['key'] = $this->cfg['api_key']; + + return $params; } /** - * {@inheritdoc} + * Call a Resource Method + * + * @param string $method + * @param array $properties + * @return \CupOfTea\YouTube\Contracts\Resource + * @throws UnauthorisedException if the method needs user authentication. + * @triggers E_USER_ERROR if the method doesn't exist for this Resource. + */ + public function __call($method, $args){ + $this->beforeMethod($method); + + array_unshift($args, $this->getHttpClient(), $this->urlSegment); + return call_user_func_array([$this, '_' . $method], $args); + } + + /** + * Runs before exectuing a Resource Method. + * + * @var string */ protected function beforeMethod($method){ $this->methodCheck($method); @@ -116,7 +151,7 @@ protected function authCheck($method){ * @throws CupOfTea\YouTube\Exceptions\MethodNotFoundException */ protected function methodCheck($method){ - if(!in_array(ucwords($method) . 'Method', class_uses($this))) + if(!in_array('CupOfTea\\YouTube\\Traits\\' . ucwords($method) . 'Method', class_uses($this))) throw new MethodNotFoundException(__CLASS__, $method); } diff --git a/src/CupOfTea/YouTube/Contracts/Resource.php b/src/CupOfTea/YouTube/Contracts/Resource.php deleted file mode 100644 index d3df684..0000000 --- a/src/CupOfTea/YouTube/Contracts/Resource.php +++ /dev/null @@ -1,30 +0,0 @@ -beforeMethod($method); - - array_unshift($args, $this->getHttpClient(), '/' . $this->segment); - return call_user_func_array([$this, '_' . $method], $args); - } - - /** - * Runs before exectuing a Resource Method. - * - * @var string - */ - protected function beforeMethod($method); - -} diff --git a/src/CupOfTea/YouTube/Traits/DeleteMethod.php b/src/CupOfTea/YouTube/Traits/DeleteMethod.php index d5be6c6..75ea697 100644 --- a/src/CupOfTea/YouTube/Traits/DeleteMethod.php +++ b/src/CupOfTea/YouTube/Traits/DeleteMethod.php @@ -1,12 +1,11 @@ -delete($url, [ 'query' => $this->getAllParameters($parameters), - 'headers' => ['Accept-Encoding' => 'gzip'], ]); - return json_decode($response); + return json_decode($response->getBody()); } } diff --git a/src/CupOfTea/YouTube/Traits/GetRatingMethod.php b/src/CupOfTea/YouTube/Traits/GetRatingMethod.php index ff3a985..ce3589e 100644 --- a/src/CupOfTea/YouTube/Traits/GetRatingMethod.php +++ b/src/CupOfTea/YouTube/Traits/GetRatingMethod.php @@ -1,12 +1,11 @@ -get($url . '/getRating', [ 'query' => $this->getAllParameters($parameters), - 'headers' => ['Accept-Encoding' => 'gzip'], ]); - return json_decode($response); + return json_decode($response->getBody()); } } diff --git a/src/CupOfTea/YouTube/Contracts/HasSubResources.php b/src/CupOfTea/YouTube/Traits/HasSubResources.php similarity index 67% rename from src/CupOfTea/YouTube/Contracts/HasSubResources.php rename to src/CupOfTea/YouTube/Traits/HasSubResources.php index 7eb9fe6..28f9666 100644 --- a/src/CupOfTea/YouTube/Contracts/HasSubResources.php +++ b/src/CupOfTea/YouTube/Traits/HasSubResources.php @@ -1,13 +1,6 @@ -available_subresources)){ - if($instance = array_get($resource, $this->resources)) + if(in_array($resource, $this->available_subresources)){ + if($instance = in_array($resource, $this->resources)) return $instance; $instance = __CLASS__ . '\\' . ucfirst($resource); - return $this->subresources[$resource] = new $instance(&$this); + return $this->subresources[$resource] = new $instance($this); } - $this->beforeMethod($resource_method); + $method = $resource_method; + $this->beforeMethod($method); + + array_unshift($args, $this->getHttpClient(), $this->urlSegment); return call_user_func_array([$this, '_' . $method], $args); } diff --git a/src/CupOfTea/YouTube/Traits/InsertMethod.php b/src/CupOfTea/YouTube/Traits/InsertMethod.php index f493ad7..adb704b 100644 --- a/src/CupOfTea/YouTube/Traits/InsertMethod.php +++ b/src/CupOfTea/YouTube/Traits/InsertMethod.php @@ -1,13 +1,12 @@ -post($url, [ 'json' => $json, 'query' => $this->getAllParameters($parameters), - 'headers' => ['Accept-Encoding' => 'gzip'], ]); - return json_decode($response); + return json_decode($response->getBody()); } } diff --git a/src/CupOfTea/YouTube/Traits/ListMethod.php b/src/CupOfTea/YouTube/Traits/ListMethod.php index 3a99582..9a73338 100644 --- a/src/CupOfTea/YouTube/Traits/ListMethod.php +++ b/src/CupOfTea/YouTube/Traits/ListMethod.php @@ -1,12 +1,11 @@ -get($url, [ 'query' => $this->getAllParameters($parameters), - 'headers' => ['Accept-Encoding' => 'gzip'], ]); - return json_decode($response); + return json_decode($response->getBody()); } } diff --git a/src/CupOfTea/YouTube/Traits/RateMethod.php b/src/CupOfTea/YouTube/Traits/RateMethod.php index 4dbd71e..a28867d 100644 --- a/src/CupOfTea/YouTube/Traits/RateMethod.php +++ b/src/CupOfTea/YouTube/Traits/RateMethod.php @@ -1,10 +1,9 @@ -post($url . '/rate', [ 'query' => $this->getAllParameters($parameters), - 'headers' => ['Accept-Encoding' => 'gzip'], ]); return $response->getStatusCode() == 204; diff --git a/src/CupOfTea/YouTube/Traits/SetMethod.php b/src/CupOfTea/YouTube/Traits/SetMethod.php index 3cd8c20..e2451c1 100644 --- a/src/CupOfTea/YouTube/Traits/SetMethod.php +++ b/src/CupOfTea/YouTube/Traits/SetMethod.php @@ -1,11 +1,10 @@ -post($url . '/set', [ 'json' => $json 'query' => $this->getAllParameters($parameters), - 'headers' => ['Accept-Encoding' => 'gzip'], ]); return $response->getStatusCode() == 204; diff --git a/src/CupOfTea/YouTube/Traits/UnsetMethod.php b/src/CupOfTea/YouTube/Traits/UnsetMethod.php index 0157929..1b5a5e8 100644 --- a/src/CupOfTea/YouTube/Traits/UnsetMethod.php +++ b/src/CupOfTea/YouTube/Traits/UnsetMethod.php @@ -1,10 +1,9 @@ -post($url, [ 'query' => $this->getAllParameters($parameters), - 'headers' => ['Accept-Encoding' => 'gzip'], ]); return $response->getStatusCode() == 204; diff --git a/src/CupOfTea/YouTube/Traits/UpdateMethod.php b/src/CupOfTea/YouTube/Traits/UpdateMethod.php index 999bee3..944eb8b 100644 --- a/src/CupOfTea/YouTube/Traits/UpdateMethod.php +++ b/src/CupOfTea/YouTube/Traits/UpdateMethod.php @@ -1,12 +1,11 @@ -put($url, [ 'query' => $this->getAllParameters($parameters), - 'headers' => ['Accept-Encoding' => 'gzip'], ]); - return json_decode($response); + return json_decode($response->getBody()); } }