Bit.Ly API

Не так давно на просторах Сети появилась интересная информация об использовании bit.ly как файлового хранилища. Интересно попробовать реализовать это. Естественно, что мы будет использовать bit.ly API. Приложение будет на C#. Так же надо продумать алгоритм загрузки.

Кратко о Bit.Ly API:
Простой и интуитивно понятный. Это если совсем кратко. Если подробнее, то в каждом API-методе мы должны передавать логин и API-ключ (да, прийдется зарегистрироваться на bit.ly, что бы получить эти данные). Свои API-ключ и логин (если внезапно Вы его забыли) можно посмотреть по ссылке http://bitly.com/a/your_api_key. На заметку: логин в API передается в нижнем регистре (сам bit.ly его автоматически в нижний регистр НЕ переводит).
API-методы могут возвращать ответ в трех форматах:

  • JSON
  • XML (его и будет использовать)
  • TXT

Методы, которые нам нужны:

  • /v3/validate. Метод, который мы вызываем самым первым. Проверяет корректность пары login|api-key. В качестве параметров принимает (помимо логина и api-ключа) формат ответа и x_login, x_apiKey (об этих двух параметрах лучше почитать в первоисточнике).
  • /v3/shorten. Метод получает длинный URL и возвращает короткую ссылку bit.ly (или j.mp, bitly.com). Стоит сказать, что длинный URL должен быть закодирован (пробелы заменены на %20 или +, никаких символов перевода строки, табуляции быть не должно, пробелов вначале и вконце быть не должно и т.д.). Так в метод передается параметр формата ответа.
  • /v3/expand. Метод получает ссылку bit.ly (или просто хэш) и возвращает соответствующий ей длинный URL. Еще в метод передается параметр формата ответа. Да, ссылок bit.ly за один запрос можно передавать несколько и в ответе будут длинные URL для каждой из них.

Официальная документация по bit.ly находится по ссылке http://code.google.com/p/bitly-api/wiki/ApiDocumentation.
В bit.ly есть ограничение на длину длинного URL. Оно составляет 2Кб. Так же bit.ly не просто берет переданные ей символы и сокращает их. bit.ly проверяет передаваемые данные и, если фильтр посчитает, что эти данные не являются ссылкой, то и сокращать ничего bit.ly не будет. Так что прийдется часть из 2Кб отдать под гипотетический URL (http://*******/#).
Теперь надо обдумать алгоритм.
Алгоритм:

  1. Получить имя файла.
  2. Проверить размер файла (bit.ly не «любит», когда очень быстро с одного аккаунта генерируется большое количество ссылок). Так что будем загружать файлы размером не больше 100Кб.
  3. Считываем содержимое файла как массив байт.
  4. Архивируем его через GZip.
  5. Base64 кодирование содержимого (+33% увеличение размера).
  6. Замена +/= на «URL-безопасные» -_|.
  7. Разбиваем содержимое файла на блоки размером 2048 — strlen(«http://d.ly/b#») = 2034 байт и по одному скармливаем bit.ly. В результате получаем список хэшей.
  8. Полученный список так же скармливаем bit.ly. Скармливаем так: http://d.ly/b# + 12 символов под расширение файла (что бы потом знать, во что сохранять) + список хэшей. «Лишнее» из 12 символов под расширение заполняет ***. Вообще, изначально хотелось выделять не 12, а 6 символов, но потом вспомнили про чудо-файлы с расширением «.torrent» :). И в результате мы получает всего одну ссылку формата http://bit.ly/123456

Вот и все. Алгоритм получения файла из короткой ссылки будет обратным к вышеописанному.

Программная реализация:
bit.ly file hosting
В верхних два поля вписываем логин и api-ключ (никуда, кроме как на bit.ly, Ваши данные не передаются, так что волноваться не стоит).
Для заливки файла нажимаем кнопку «Выбрать файл» и в открывшемся диалоговом окне выбираем файл. Если его размер не превышает допустимый, то в поле ввода под кнопкой будет прописан полный путь до выбранного файла. Теперь нажимаем «Залить!» и ждем. Заливка выполняется в основном потоке программы, так что может воникнуть ощущение, что программа подвисла на пару секунд (делать отдельный поток в рамках такого тестового проекта нет смысла). После заливки (если не возникло ошибки) в самом нижнем поле ввода появится ссылка на загруженный файл. Что бы скачать файл, необходимо ввести его bit.ly-ссылку в нижнее поле (там, где появляется ссылка при загрузке файла) и нажать кнопку «Скачать!». В директории программы будет создан файл с исходных расширением, но под другим именем (DateTime.Now.Ticks).

Исходные коды проекта (Microsoft Visual Studio 2010 Ultimate) — скачать.
Сама программа — скачать.

, , , ,

1 комментарий
  1. xhugo сказал(а):

    Думаю что это как то нудно всё.
    Сама реализация понравилась.

Оставить комментарий

Top ↑ | Main page | Back