Как стать автором
Обновить

Библиотека классов для работы со службой «API Яндекс.Фотки»

PHP
Библиотека позволит вам использовать службу «API Яндекс.Фотки» в проектах, написанных на PHP и охватывает все возможности, которые на данный момент предоставляет API.
Страничка, которая посвящена работе библиотеки: code.websaints.net

Используя эту библиотеку вы можете:
  • Организовать фотогалерею или систему фотогалерей на сайте
  • Управлять галереей, включая загрузку и удаление фотографий, создание и удаление альбомов, а так же управление метаданными

Сервис «Яндекс.Фотки» стоит использовать, так как:
  • Вы не тратите место на хранение изображений на сервере вашего проекта
  • Для работы галереи вам не требуется использование базы данных или другого инструмента, для хранения метаданных и управления ими
  • Служба создает картинки предпросмотра шириной 800,500,300,150,100,75 и 50px и вам не нужно делать это самому.
  • Высока вероятность того, что сервера Яндекс, на которых будут храниться материалы, более надежны, чем у вашего хостинг провайдера
  • Высока вероятность того, что скорость загрузки фотографий пользователем будет выше, чем при загрузке их с вашего сервера

Под катом вы найдете пример работы и его код, снабженный краткими комментариями.


Пример


Галерея любимых фотографий Владислава Мамонтовича

Сразу оговорюсь:
— Нет, вы не сможете создать хостинг изображений на основе этого сервиса, так как это будет нарушать п. 1.2.4. пользовательского соглашения службы «API Яндекс.Фотки». Пример выбран именно таким из соображений наглядности и является… не совсем корректным. Я надеюсь, что сотрудники Яндекса отнесутся к нему снисходительно. Или, по крайней мере, предупредят, прежде чем блокировать несчастного Владислава Мамонтовича.

Пример состоит из 2х файлов:
  1. example.html — отображение галереи
  2. upload_image.html — загрузка изображений

Я не буду акцентировать внимание ни на чем, кроме кода, где непосредственно идет работа с Яндекс.Фотки. Если возникнут вопросы, связанные с каким то кодом — задайте их в комментариях. Я обязательно отвечу.

example.html


Какие ключевые возможности должна реализовать эта страница:
  • Показать список из 25 последних загруженных Мамонтовичем изображений
  • Если нам передан идентификатор загруженного изображения, вывести список ссыллок на созданные службой Яндекс.Фотки картинки предпросмотра и оригинал изображения
  • Вывести форму загрузки изображений, что бы Владислав Мамонтович мог пополнять свою галерею


1. Создадим пользователя от имени которого будем работать с сервисом. А именно — Владислава Мамонтовича.

  1. $photo = new yandex_fotki("MojoElephant");


2. Получим общую коллекцию фотографий Мамонтовича

  1. $photo->user()->add_photo_collection("Слонофотки");


3. Получим последние 25 загруженных Мамонтовичем фотографий

  1. $photo->user()->photo_collection("Слонофотки")->se(array("limit"=>25));


4. Перебрав их все сформируем галерею

  1. foreach($photo->user()->photo_collection("Слонофотки")->photo_list(0) as $index=>$photo_element){
  2. $photo_block = new template_class("Фото","../../templates/photo.html");
  3. $photo_block->point("Точки ввода");
  4. $photo_block->plug("Точки ввода","Увеличенное","Увеличенное",$photo_element->get_L());
  5. $photo_block->plug("Точки ввода","Предпросмотр","Предпросмотр",$photo_element->get_XXS());
  6. $gallery->plug("Точки ввода","Фотография",$index,$photo_block->render());
  7. }


5. Если Мамонтович загрузил фотографию, то в скрипт был передан идентификатор новой фотографии. Получаем свежезагруженную фотографию по ее id

  1. $new_photo = $photo->user()->photo_collection("Слонофотки")->get_photo_by_id($photo_id);


6. Выводим список ссылок

  1. $link_block = new template_class("Ссылки","../../templates/link_block.html");
  2. $link_block->point("Точки ввода");
  3. $link_block->plug("Точки ввода","Оригинальная","Ссылка",$new_photo->get_orig());
  4. $link_block->plug("Точки ввода","XL","Ссылка",$new_photo->get_XL());
  5. $link_block->plug("Точки ввода","L","Ссылка",$new_photo->get_L());
  6. $link_block->plug("Точки ввода","M","Ссылка",$new_photo->get_M());
  7. $link_block->plug("Точки ввода","S","Ссылка",$new_photo->get_S());
  8. $link_block->plug("Точки ввода","XS","Ссылка",$new_photo->get_XS());
  9. $link_block->plug("Точки ввода","XXS","Ссылка",$new_photo->get_XXS());
  10. $link_block->plug("Точки ввода","XXXS","Ссылка",$new_photo->get_XXXS());


upload_image.html


Какие ключевые возможности должна реализовать эта страница:
  • Сохранить присланное изображение на сервисе Яндекс.Фотки
  • Сообщить example.html идентификатор загруженного на сервер изображения

1. Так как загрузка фотографий возможна только для аутентифицированного пользователя, то мы создаем объект класса yandex_fotki и аутентифицируемся.

  1. $photo = new yandex_fotki("MojoElephant","пароль");


2. После этого надо получить коллекцию фотографий, в которую мы добавим новую фотографию Мамонтовича.

  1. $photo->user()->add_photo_collection("Слонофотки");


3. И, собственно, загрузим фотографию на Яндекс.Фотки. После загрузки мы получим идентификатор фотографии.

  1. $new_photo = array(
  2. "path"=>"../../uploaded/".$_FILES["photo"]["name"]
  3. );
  4. $result = $photo->user()->photo_collection("Слонофотки")->up($new_photo);


4. Сохраним идентификатор фотографии. Вы можете использовать любой способ, хоть GETом передать. Я для этих целей использую систему сообщений, которая хранит данные в сессии.

5. Направляем Мамонтовича на example.html, где он получит ссылки на загруженную фотографию и увидеть ее в галерее.

Заключение


Как видите, все предельно просто и приятно.
Используя минимум усилий вы можете внедрить галерею на сайт.
Единственный минус хранения фотографий на Яндекс.Фотки заключается в том, что на запросы метаданных у службы уходит больше времени, чем при хранении их на вашем сервисе. Но разумное использование кэширования практически сводит его на нет.

Материалы для дополнительного изучения



Спасибо


Огромное спасибо ar2r и nickmitin за помощь с портированием алгоритма шифрования, proto за разьяснения по поводу проекта API Яндекс.Фотки, комментарии и всем всем всем за уделенное мне время. И не менее большое спасибо тем людям с канала #php RusNet, которые дали моей работе экспертную оценку и посоветовали, что можно сделать лучше. mz, avz, focusshifter и всем остальным. Спасибо вам.

Код подсвечен highlight.hohli.com который придумал antonshevchuk



Что дальше?


Дальше будет поиск и исправление ошибок, рефакторинг кода, написание более подробных статей о использовании библиотеки и идеологии работы Яндек.Фоток, возможно, создание плагинов для нескольких CMS. Да, собственно, все, что будет нужно и интересно мне и вам.
Но для того что бы дальше было хоть что то мне нужно знать, что моя работа кому то нужна. Если вам библиотека может быть полезна — напишите об этом. Не молчите.

P.S. Если вам понравилась библиотека и вы думаете об участии DEVCONF — проголосуйте за мой доклад на сайте конференции: www.devconf.ru/phpconf/offers
Теги:phpyandex.fotkiyandex apiapilibrary
Хабы: PHP
Всего голосов 44: ↑34 и ↓10 +24
Просмотры3.7K

Похожие публикации

Backend- разработчик на Go
23 июня 202181 000 ₽SkillFactory
Python для анализа данных
23 июня 202124 900 ₽SkillFactory
Профессия Product Manager
23 июня 2021105 000 ₽Нетология
Факультет аналитики Big Data
23 июня 2021270 000 ₽GeekBrains
Кто есть кто в IT?
23 июня 2021БесплатноOTUS

Лучшие публикации за сутки