1
0
mirror of synced 2025-02-12 02:09:23 +03:00

fix imgur

This commit is contained in:
Dmitry Mamontov 2015-07-21 10:33:02 +03:00
parent 6420c215f9
commit 51aeb0ed28
3 changed files with 37 additions and 34 deletions

View File

@ -12,11 +12,6 @@ class MoySkladICMLParser
*/ */
const IMGUR_URL = 'https://api.imgur.com/3/image.json'; const IMGUR_URL = 'https://api.imgur.com/3/image.json';
/**
* imgur client id
*/
const IMGUR_CLIENT_ID = '042dcb6bf65b6fd';
/** /**
* Таймаут в секундах * Таймаут в секундах
*/ */
@ -148,7 +143,7 @@ class MoySkladICMLParser
$products = $this->parseProducts($categories, $vendors); $products = $this->parseProducts($categories, $vendors);
if (isset($this->options['image']) && $this->options['image'] === true) { if (isset($this->options['imgur']) && isset($this->options['imgur']['clientId'])) {
$products = $this->uploadImage($products); $products = $this->uploadImage($products);
} }
@ -165,40 +160,50 @@ class MoySkladICMLParser
*/ */
protected function uploadImage($products) protected function uploadImage($products)
{ {
if (file_exists(__DIR__ . '/images') === false) {
@mkdir(__DIR__ . '/images');
}
$uploaded = array(); $uploaded = array();
if (file_exists(__DIR__ . "/images.json")) { if (file_exists(__DIR__ . "/images/{$this->shop}.json")) {
$uploaded = json_decode(file_get_contents(__DIR__ . "/images.json"), true); $uploaded = json_decode(file_get_contents(__DIR__ . "/images/{$this->shop}.json"), true);
} }
foreach ($products as $id => $product) { foreach ($products as $id => $product) {
if (isset($product['tmpPicture'])) { if (isset($product['tmpPicture'])) {
if (isset($uploaded[$this->shop]) && isset($uploaded[$this->shop][$product['tmpPicture']['uuid']])) { if (isset($uploaded) && isset($uploaded[$product['tmpPicture']['uuid']])) {
$products[$id]['picture'] = $uploaded[$this->shop][$product['tmpPicture']['uuid']]; $products[$id]['picture'] = $uploaded[$product['tmpPicture']['uuid']];
unset($product['tmpPicture']);
continue; continue;
} }
$data = array(
'image' => $product['tmpPicture']['contents'],
'name' => $product['tmpPicture']['filename']
);
$ch = curl_init(); $ch = curl_init();
curl_setopt($ch, CURLOPT_URL, self::IMGUR_URL); curl_setopt($ch, CURLOPT_URL, self::IMGUR_URL);
curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Client-ID ' . self::IMGUR_CLIENT_ID)); curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Client-ID {$this->options['imgur']['clientId']}"));
curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, array('image' => $product['tmpPicture']['contents'])); curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$result = curl_exec($ch); $result = curl_exec($ch);
curl_close($ch); curl_close($ch);
$result = json_decode($result, true); $result = @json_decode($result, true);
if (isset($result['success']) && $result['success'] == true) { if (isset($result['success']) && $result['success'] == true) {
$products[$id]['picture'] = $result['data']['link']; $products[$id]['picture'] = $result['data']['link'];
$uploaded[$this->shop][$product['tmpPicture']['uuid']] = $result['data']['link']; $uploaded[$product['tmpPicture']['uuid']] = $result['data']['link'];
} }
unset($product['tmpPicture']); unset($product['tmpPicture']);
} }
} }
if (count($uploaded) > 0) { if (count($uploaded) > 0) {
file_put_contents(__DIR__ . "/images.json", json_encode($uploaded)); file_put_contents(__DIR__ . "/images/{$this->shop}.json", json_encode($uploaded));
} }
return $products; return $products;
@ -324,7 +329,7 @@ class MoySkladICMLParser
$total = 0; $total = 0;
do { do {
$query = array('start' => $start); $query = array('start' => $start);
if (isset($this->options['image']) && $this->options['image'] === true) { if (isset($this->options['imgur'])) {
$query['fileContent'] = 'true'; $query['fileContent'] = 'true';
} }
$xml = $this->requestXml(self::PRODUCT_LIST_URL.'?'.http_build_query($query)); $xml = $this->requestXml(self::PRODUCT_LIST_URL.'?'.http_build_query($query));
@ -356,8 +361,7 @@ class MoySkladICMLParser
); );
if ( if (
isset($this->options['image']) && isset($this->options['imgur']) &&
$this->options['image'] === true &&
isset($v->images) && isset($v->images) &&
isset($v->images->image) && isset($v->images->image) &&
isset($v->images->image->contents) isset($v->images->image->contents)
@ -366,6 +370,10 @@ class MoySkladICMLParser
'uuid' => (string) $v->images->image->uuid, 'uuid' => (string) $v->images->image->uuid,
'contents' => (string) $v->images->image->contents 'contents' => (string) $v->images->image->contents
); );
if (isset($v->images->image['filename'])) {
$products[$uuid]['tmpPicture']['filename'] = $v->images->image['filename'];
}
} }
} }

View File

@ -38,24 +38,19 @@ $parser->generateICML();
* `ignoreProducts` - Массив с ключами: * `ignoreProducts` - Массив с ключами:
* `uuids` - Массив с `uuid` товаров, которые будут проигнорированы (Модификации товара проигнорировать нельзя) * `uuids` - Массив с `uuid` товаров, которые будут проигнорированы (Модификации товара проигнорировать нельзя)
* `externalCodes` - Массив с `внешними кодами` товаров, которые будут проигнорированы (Модификации товара проигнорировать нельзя) * `externalCodes` - Массив с `внешними кодами` товаров, которые будут проигнорированы (Модификации товара проигнорировать нельзя)
* `imgur` - Хостинг изображений
* `clientId` - Уникальный идентификатор приложения (как его получить читайте далее)
Все доступные опции не обязательны для использования Все доступные опции не обязательны для использования
## Добавление пользовательских полей url и picture ## Добавление изображения
Для того чтобы добавить в выгрузку изображение товара либо url требуется создать 2 пользовательских поля к товару в моем складе Для того чтобы добавить в выгрузку изображение товара
1) Заходим в Администрирование<br> Создать приложение на сайте https://api.imgur.com/oauth2/addclient
2) Выбираем вкладку справочники<br> * Application name - Название сайта
3) Затем выбрать справочник Товар<br> * Authorization type - OAuth 2 authorization without a callback URL
4) Добавить нужное пользовательское поле<br> * Application website - URL сайта
* Email - email администаротора сайта
Параметры пользовательского поля для URL * Description - Описание сайта
* `Название` - RetailCrmURL После создания приложения отобразится два поля `Client ID` и `Client secret`. Нам потребуется только `Client ID` который требуется вставить в $options.
* `Тип` - Строка
Параметры пользовательского поля для пути к изображению
* `Название` - RetailCrmPicture
* `Тип` - Строка
![settings](https://raw.githubusercontent.com/dmamontov/moyskad-catalog/master/doc/settings/settings.png)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB