Skip to content

Commit

Permalink
Merge pull request #23 from gettyimages/add_sbi_functionality
Browse files Browse the repository at this point in the history
Add SearchByImage functionality
  • Loading branch information
ssterli2 committed Dec 6, 2022
2 parents e5fc8a2 + 89bd2c3 commit ba79f74
Show file tree
Hide file tree
Showing 8 changed files with 563 additions and 0 deletions.
27 changes: 27 additions & 0 deletions examples/searchbyimage.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#!/usr/bin/env php

<?php
require '../vendor/autoload.php';
use GettyImages\Api\GettyImages_Client;

$apiKey = "API_KEY";
$apiSecret = "API_SECRET";
$user = "USER";
$password = "PASSWORD";

$client = GettyImages_Client::getClientWithResourceOwnerCredentials("$apiKey", "$apiSecret", "$user", "$password");

//Upload image to bucket and search:
$destFilename = "testimage.jpg";
$sourceFilepath = "filepath/to/testimage.jpg";

$uploadedImageResponse = $client->SearchImagesCreativeByImage()->addToBucketAndSearch($destFilename, $sourceFilepath)->execute();

echo $uploadedImageResponse;

//Search by GettyImages asset id:
$assetId = "1194409229";

$assetIdResponse = $client->SearchImagesCreativeByImage()->withAssetId($assetId)->execute();

echo $assetIdResponse;
28 changes: 28 additions & 0 deletions src/GettyImages_Client.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@
require_once("Request/Videos/VideosSimilar.php");
require_once("Request/Search/SearchImages.php");
require_once("Request/Search/SearchImagesCreative.php");
require_once("Request/Search/SearchImagesCreativeByImage.php");
require_once("Request/Search/SearchVideosCreativeByImage.php");
require_once("Request/Search/SearchImagesEditorial.php");
require_once("Request/Search/SearchVideos.php");
require_once("Request/Search/SearchVideosCreative.php");
Expand All @@ -37,6 +39,8 @@

use GettyImages\Api\Request\Search\SearchImages;
use GettyImages\Api\Request\Search\SearchImagesCreative;
use GettyImages\Api\Request\Search\SearchImagesCreativeByImage;
use GettyImages\Api\Request\Search\SearchVideosCreativeByImage;
use GettyImages\Api\Request\Search\SearchImagesEditorial;
use GettyImages\Api\Request\Search\SearchVideos;
use GettyImages\Api\Request\Search\SearchVideosCreative;
Expand Down Expand Up @@ -330,6 +334,18 @@ public function SearchImagesCreative() {
return $searchImagesCreativeObj;
}

/**
* SearchImagesCreativeByImage
*
* Search for creative Images by image
*
* @return SearchImagesCreativeByImage
*/
public function SearchImagesCreativeByImage() {
$searchImagesCreativeByImageObj = new SearchImagesCreativeByImage($this->credentials,$this->apiBaseUri,$this->container);
return $searchImagesCreativeByImageObj;
}

/**
* SearchImagesEditorial
*
Expand Down Expand Up @@ -366,6 +382,18 @@ public function SearchVideosCreative() {
return $searchVideosCreativeObj;
}

/**
* SearchVideosCreativeByImage
*
* Search for creative Videos by image
*
* @return SearchVideosCreativeByImage
*/
public function SearchVideosCreativeByImage() {
$searchVideosCreativeByImageObj = new SearchVideosCreativeByImage($this->credentials,$this->apiBaseUri,$this->container);
return $searchVideosCreativeByImageObj;
}

/**
* SearchVideosEditorial
*
Expand Down
18 changes: 18 additions & 0 deletions src/Request/FluentRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,24 @@ public function execute() {
return $this->handleResponse($response);
}

/**
* Upload image for SBI search
*/
protected function executeFileUpload(string $route, string $filepath) {
$endpointUrl = $this->endpointUri."/".$route;

$this->options[CURLOPT_HTTPHEADER][] = "Api-Key:".$this->credentials->getApiKey();

$webHelper = new WebHelper($this->container);

$response = $webHelper->putImageRequest($endpointUrl,
$this->requestDetails,
$this->options,
$filepath);

return $this->handleResponse($response);
}

protected function handleResponse($response){
if(($response["http_code"] < 200 || $response["http_code"] >= 300) && $response['http_code'] != 303) {
throw new \Exception("Non 200 status code returned: " .$response["http_code"] . "\nBody: ". $response["body"]);
Expand Down
110 changes: 110 additions & 0 deletions src/Request/Search/SearchImagesCreativeByImage.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
<?php

namespace GettyImages\Api\Request\Search {

use GettyImages\Api\Request\FluentRequest;
use GettyImages\Api\Request\WebHelper;
use Exception;

class SearchImagesCreativeByImage extends FluentRequest {

/**
* @ignore
*/
protected $route = "search/images/creative/by-image";

protected function getRoute() {
return $this->route;
}

protected function getMethod() {
return "get";
}

/**
* @ignore
*/
private function addToBucket(string $destFilename, string $sourceFilepath)
{
$route = 'search/by-image/uploads/'.$destFilename;
$fileUrl = $this->endpointUri."/".$route;
self::executeFileUpload($route, $sourceFilepath);
return $fileUrl;
}

public function addToBucketAndSearch(string $destFilename, string $sourceFilepath)
{
$url = self::addToBucket($destFilename, $sourceFilepath);
return self::withImageUrl($url);
}

/**
* @param int $pageNum
* @return $this
*/
public function withImageUrl(string $url) {
$this->requestDetails["image_url"] = $url;
return $this;
}

/**
* @param int $pageNum
* @return $this
*/
public function withAssetId(string $assetId) {
$this->requestDetails["asset_id"] = $assetId;
return $this;
}

/**
* Will set the search request to only return the fields provided.
*
* @param array $fields An array of field names to include in the response.
* this list isn't exclusive, default fields are always returned.
* @throws Exception
* @return $this
*/
public function withFields(array $fields) {
$this->addArrayOfValuesToRequestDetails("fields", $fields);
return $this;
}

/**
* @param int $pageNum
* @return $this
*/
public function withPage(int $pageNum) {
$this->requestDetails["page"] = $pageNum;
return $this;
}

/**
* @param int $pageSize
* @return $this
*/
public function withPageSize(int $pageSize) {
$this->requestDetails["page_size"] = $pageSize;
return $this;
}

/**
* @param array $productTypes An array of product types by which to filter.
* @throws Exception
* @return $this
*/
public function withProductTypes(array $productTypes) {
$this->addArrayOfValuesToRequestDetails("product_types", $productTypes);
return $this;
}

/**
* @param array $acceptLanguage Provide a header to specify the language of result values.
* @throws Exception
* @return $this
*/
public function withAcceptLanguage(string $acceptLanguage) {
$this->addHeader("Accept-Language", $acceptLanguage);
return $this;
}
}
}
110 changes: 110 additions & 0 deletions src/Request/Search/SearchVideosCreativeByImage.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
<?php

namespace GettyImages\Api\Request\Search {

use GettyImages\Api\Request\FluentRequest;
use GettyImages\Api\Request\WebHelper;
use Exception;

class SearchVideosCreativeByImage extends FluentRequest {

/**
* @ignore
*/
protected $route = "search/videos/creative/by-image";

protected function getRoute() {
return $this->route;
}

protected function getMethod() {
return "get";
}

/**
* @ignore
*/
private function addToBucket(string $destFilename, string $sourceFilepath)
{
$route = 'search/by-image/uploads/'.$destFilename;
$fileUrl = $this->endpointUri."/".$route;
self::executeFileUpload($route, $sourceFilepath);
return $fileUrl;
}

public function addToBucketAndSearch(string $destFilename, string $sourceFilepath)
{
$url = self::addToBucket($destFilename, $sourceFilepath);
return self::withImageUrl($url);
}

/**
* @param int $pageNum
* @return $this
*/
public function withImageUrl(string $url) {
$this->requestDetails["image_url"] = $url;
return $this;
}

/**
* @param int $pageNum
* @return $this
*/
public function withAssetId(string $assetId) {
$this->requestDetails["asset_id"] = $assetId;
return $this;
}

/**
* Will set the search request to only return the fields provided.
*
* @param array $fields An array of field names to include in the response.
* this list isn't exclusive, default fields are always returned.
* @throws Exception
* @return $this
*/
public function withFields(array $fields) {
$this->addArrayOfValuesToRequestDetails("fields", $fields);
return $this;
}

/**
* @param int $pageNum
* @return $this
*/
public function withPage(int $pageNum) {
$this->requestDetails["page"] = $pageNum;
return $this;
}

/**
* @param int $pageSize
* @return $this
*/
public function withPageSize(int $pageSize) {
$this->requestDetails["page_size"] = $pageSize;
return $this;
}

/**
* @param array $productTypes An array of product types by which to filter.
* @throws Exception
* @return $this
*/
public function withProductTypes(array $productTypes) {
$this->addArrayOfValuesToRequestDetails("product_types", $productTypes);
return $this;
}

/**
* @param array $acceptLanguage Provide a header to specify the language of result values.
* @throws Exception
* @return $this
*/
public function withAcceptLanguage(string $acceptLanguage) {
$this->addHeader("Accept-Language", $acceptLanguage);
return $this;
}
}
}
26 changes: 26 additions & 0 deletions src/Request/WebHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,32 @@ public function put($endpoint, $queryParams, array $options = array(), array $da
return $result;
}

/**
* Send a PUT requst using cURL
* @param string $url to request
* @param array $queryParams values to send
* @param array $options for cURL
* @param string $filepath of image to add
* @return string
*/
public function putImageRequest($endpoint, $queryParams, array $options = array(), string $filepath) {

$image = fopen($filepath, "rb");

if(!array_key_exists(CURLOPT_HTTPHEADER, $options)) {
$options[CURLOPT_HTTPHEADER] = array();
}

array_push($options[CURLOPT_HTTPHEADER],'Content-Type: image/jpeg');
$options[CURLOPT_PUT] = 1;
$options[CURLOPT_INFILE] = $image;
$options[CURLOPT_INFILESIZE] = filesize($filepath);
$options[CURLOPT_URL] = $endpoint;
$result = self::execute($options);

return $result;
}


/**
* Send a GET requst using cURL
Expand Down
Loading

0 comments on commit ba79f74

Please sign in to comment.