papilio

Получение задач Google Tasks

Давненько я не писал в этот блог, хотя, конечно, не от того, что мне не о чем было писать или я перестал интересоваться web-разработкой и интернет-технологиями. Нет, скорее всего было просто лень :-)

Но чтобы эту лень побороть, надо пользоваться каким-нибудь планировщиком/календарём. А так как я полностью на продуктах Google, то неудивительно, что я пользуюсь Google Calendar (который замечательно синхронизируется как с системой, так и с телефоном) и теперь Google Tasks.

Итак, задача и проблема: мне необходимо вывести мои задачи Google Tasks прямо в консоли (это необходимо, например, чтобы потом повесить этот список задач прямо на мой рабочий стол, где уже есть Google Calendar). Как же это сделать, если пока нет Google Tasks API? Если нет, то нам придётся эмулировать работу браузера, чтобы получить список задач.

Для начала стоит выбрать верную версию сайта Google Tasks среди огромного множества (разные устройства, iGoogle, Gmail и т.п.). Я выбрал мобильную версию, так как можно напрямую обратиться к нужному списку:

  • https://mail.google.com/tasks/m для владельцев Google Accounts
  • https://mail.google.com/tasks/a/domain.com/m для пользователей Google Apps

Сначала я решил воспользоваться просто bash и написать скрипт. Но после того, как я довольно долго с этим промучался, я решил всё-таки писать на python, так как он есть у всех.

В итоге получился скрипт, который я немного прокомментирую чуть ниже (можно скачать отдельным файлом google_tasks.py):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
#!/usr/bin/env python
 
"""
This is a python script for retrieving Google Tasks 
Usage: 
    -e or --email [email] 
        Your Google Account or Google Apps email 
    -p or --password [password] 
        Your password 
    -b or --bullet [bullet] 
        Bullet for tasks list. Default is '*'
 
Example:
    google_tasks.py -e bob@gmail.com -p yaroslavl -b --
 
Thank you Scott Hillman for the implementation of Google Authentication
http://everydayscripting.blogspot.com/2009/10/python-fixes-to-google-login-script.html
 
Evgeny Pavlov, http://evgeny.tel
"""
 
import urllib
import urllib2
import htmllib
import getpass
import re
import sys
import getopt
 
def unescape(text):
    """Removes HTML or XML character references 
       and entities from a text string
 
       From Fredrik Lundh
       http://effbot.org/zone/re-sub.htm#unescape-html
 
       Little bit modified
    """
    def fixup(m):
        text = m.group(0)
        if text[:2] == "&#":
            # Character reference
            try:
                if text[:3] == "&#x":
                    return unichr(int(text[3:-1], 16))
                else:
                    return unichr(int(text[2:-1]))
            except ValueError:
                print "Error with encoding HTML entities"
                pass
        else:
            # Named entity
            text = unichr(htmlentitydefs.name2codepoint[text[1:-1]])
        return text # leave as is
    return re.sub("&#?\w+;", fixup, text)
 
def main(argv):
    """ Get arguments: email, password and type of bullet """
 
    bullet = '* '
    email =  ''
    password = ''
 
    try:
        opts, args = getopt.getopt(argv, "he:p:b:", ["help", "email=", "password=", "bullet="]) 
    except getopt.GetoptError:
        usage()
        sys.exit(2)
    for opt, arg in opts:
        if opt in ("-h", "--help"):
            usage()
            sys.exit()
        elif opt in ("-e", "--email"):
            email = arg
        elif opt in ("-p", "--password"):
            password = arg
        elif opt in ("-b", "--bullet"):
            bullet = arg    
 
    return (email, password, bullet)
 
def usage():
    """ Help and the list of arguments for this script """
 
    print """This is a python script for retrieving Google Tasks 
Usage: 
    -e or --email [email] 
        Your Google Account or Google Apps email 
    -p or --password [password] 
        Your password 
    -b or --bullet [bullet] 
        Bullet for tasks list. Default is '*'
 
Example:
    google_tasks.py -e bob@gmail.com -p yaroslavl -b --
 
Evgeny Pavlov, http://evgeny.tel"""
 
if __name__ == "__main__":
    # Arguments
    (email, password, bullet) = main(sys.argv[1:])
 
    # Google Account or Google Apps
    email_split = email.split('@')
    try:
        email_domain = email_split[1]
    except:
        print 'Incorrect email address!\n'
        usage()
        sys.exit()
    if email_domain in ('googlemail.com', 'gmail.com', 'google.com'):
        google_apps = 0
    else:
        google_apps = 1
        email = email_split[0]
 
    # Initialization  
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())
    urllib2.install_opener(opener)
 
    # Define URLs
    if google_apps:
        login_page_url = 'https://www.google.com/a/%s/ServiceLogin' % email_domain
        auth_url = 'https://www.google.com/a/%s/LoginAction2' % email_domain
        tasks_url = 'https://mail.google.com/tasks/a/%s/m' % email_domain
    else:
        login_page_url = 'https://www.google.com/accounts/ServiceLogin'
        auth_url = 'https://www.google.com/accounts/ServiceLoginAuth'
        tasks_url = 'https://mail.google.com/tasks/m'
 
    # 1. Load login page
    login_page_content = opener.open(login_page_url).read()
 
    # Find GALX value
    galx_match_obj = re.search(r'name="GALX"\s*value="([^"]+)"', login_page_content, re.IGNORECASE)
 
    galx = galx_match_obj.group(1) if galx_match_obj.group(1) is not None else ''
 
    # Set up login credentials
    login_params = urllib.urlencode( {
       'Email' : email,
       'Passwd' : password,
       'continue' : tasks_url,
       'GALX': galx
    })
 
    # 2. Login
    opener.open(auth_url, login_params)
 
    # 3. Open Tasks home page
    tasks_content = opener.open(tasks_url).read()
 
    # Check signing in
    key = re.search('create_tasks', tasks_content)
    if not key:
        print 'Check your credintals!'
        sys.exit()
 
    # Retrieve list ids
    tasks_content_split_obj = re.search(r'<select(.*?)select>', tasks_content, re.IGNORECASE)
    tasks_content_split = tasks_content_split_obj.group(1)
    listids = re.findall(r'[0-9]{20}:[0-9]:[0-9]', tasks_content_split)
 
    # 4. Fetch all lists
    for listid in listids:
        # List content
        list_content = opener.open(tasks_url + "?listid=%s" % listid).read()
 
        # Only tasks remain
        list_content_split_obj = re.search('(.*?)name="numa"', list_content, re.IGNORECASE | re.DOTALL)
        list_content_split = list_content_split_obj.group(1)
 
        # Get Tasks in
<tr></tr>
tasks_in_tr = re.findall(r'
<tr(.*?)tr>', list_content_split, re.IGNORECASE | re.DOTALL)
 
        # Work with this dirty tasks
        for task_in_tr in tasks_in_tr:
            # Retrieve task
            task_obj = re.search(r'
<td class="text">(.*?)</td>
', task_in_tr, re.IGNORECASE)
            task = task_obj.group(1)
 
            # Indent
            indent = len(re.findall(r'
<td class="checkbox"', task_in_tr)) - 1
 
            # HTML entities
            task = unescape(task)
            task = task.strip()
 
            # 5. At last output
            if task  != '': 
                print '  ' * indent, bullet, task

Скрипт выводит список задач Google Tasks в довольно приятном виде.

Как же работает этот скрипт? Всё довольно просто: для того чтобы пройти аутентификацию Google, нужны адрес электронной почты и пароль. При этом Google проверяет, как происходит вход, поэтому каждый раз генерирует специальное значение GALX, которое затем сверяет. Но обо всём (почти обо всём по порядку):

  • 31-56, функция unescape (). Необходима для конвертации т.н. HTML entities, которые присутствуют в мобильной версии Google Tasks. Переводит #&123; в нормальные символы. Реализацию подсмотрел на W3C.
  • 59-80, функция main () нам нужна для того, чтобы прочесть аргументы, переданные в командной строке. Идея из онлайн-книги Dive Into Python.
  • 106-118, определение, каким является аккаунт — Google Accounts или Google Apps. Происходит путём банальной проверки домена.
  • 134-151, аутентификация Google как раз с использованием GALX. Кроме того, необходимо использовать cookies. Идея блога Every Day Scripting. У меня получалось реализовать и с помощью wget. Если кому-то интересно, то могу поделиться.
  • А дальше происходит анализ HTML и поиск задач.

Чтобы воспользоваться скриптом, надо его просто положить в нужное вам место, сделать исполняемым (chown +x) и запускать со следущими параметрами:

google_tasks.py -e bob@gmail.com -p yaroslavl

Кроме того, можно менять оформление задач с помощью ключа -b: по-умолчанию стоит звёзточка.

Метки: , , , ,

Статистика подкастов

Недавно на нашей основной ленте мы выпустили свой первый PicLab Podcast. Конечно же, хотелось бы узнать, сколько скачивают этот подкаст, с каких программ и из каких регионов.

Самый простой вариант это сделать — зарегистрироваться в каком-нибудь подкаст-каталоге (директории подкастов), выложить аудио-файл на их сервер и смотреть красивую статистику. Но я практически сразу отмёл этот способ, так как мне не совсем нравится то, что, например, Russian Podcasting добавляет небольшую короткую аудиорекламу в начале каждого подкаста, если он записан на их сервере. Всё правильно: за хранение подкаста на их сервере всё-таки надо как-то платить.

Другой способ — это платные директории подкастов (например, LibSyn). Они не добавляют рекламы к вашим подкастам и предоставляют отличную статистику.

Но зачем же платить, если есть место на собственном сервере, или, что ещё лучше, можно разместить всё на Amazon S3? Но тогда возникает вопрос: как подсчитать статистику таких подкастов, особенно, если хочется их выложить сразу же на нескольких директориях подкастов? Всё просто: надо воспользоваться бесплатным сервисом Blubrry!

Для этого достаточно добавить к адресу своего подкаста специальный адрес сервиса Blubrry. Например, для нашего подкаста он выглядит как

http://media.blubrry.com/piclab/

— следовательно, если сам подкаст лежит по адресу http://blog.piclab.ru/wp-content/podcasts/piclab_podcast_01_04032009.mp3, то новый адрес будет иметь вид http://media.blubrry.com/piclab/blog.piclab.ru/wp-content/podcasts/piclab_podcast_01_04032009.mp3.

Именно этим и обеспечивается возможность подсчёта статистики сервисом Blubrry.

Сводка по статистики всех подкастов в Blubrry

Сводка по статистики всех подкастов в Blubrry

Конечно, в бесплатной версии не так много возможностей, однако можно посмотреть на общее количество скачиваний, с каких программ качают и откуда.

Статистика конкретного подкаста в сервисе Blubrry

Статистика конкретного подкаста в сервисе Blubrry

Кроме того, можно узнать с каких мест больше всего скачивают ваши подкасты: это удобно, когда вы размещаете подкасты в различных директориях.

По-моему, удобно. Хотя я попробую ещё поискать системы, которые можно было бы просто поставить на свой сервер. Да, можно анализировать логи, но, может быть, если что-то специально для подкастов?

Метки: , , , , , , ,

Как скачать полностью блог

Я уже как-то писал, как скачать полностью сайт с помощью программы Wget. Но когда я попытался скачать блог на WordPress с включённой функцией т.н. чистых ссылок (permalink), то у меня не скачивались статьи.

Почему же так получалось? Всё просто. Для начала рассмотрим стандартный вид адреса статьи в блоге:

/2009/02/10/merge-google-contacts.html

— Wget будет скачивать и /2009/02, что является страницей архива всех записей за данный период, и саму статью. Первую страницу он сохранит в файл 02 в директории 2009, но куда же сохранить статью, если уже не получится создать директории с тем же именем 02? Именно в этом и была у меня проблема.

Всё решается просто: достаточно указать флаг -E в параметрах запуска Wget, чтобы он все страницы сохранял с расширением .html. Теперь страница с архивом будет сохранена как 02.html в директории 2009, так что Wget сможет создать директории 02, чтобы сохранить запись.

Итак, итоговая строка запуска Wget с параметрами будет выглядеть так:

wget -r -l20 -k -E -c http://www.site.ru

где r — рекурсивно,
l — глубина рекурсии,
c — с возможностью докачки,
k — конвертация ссылок в абсолютные по окончанию закачки,
E — сохранять страницы с расширением .html.

Я пробовал другие программы, но Wget всё равно лучше и проще.

Метки: , , , ,

CloudBerry Explorer — работать с Amazon S3 стало проще

Я уже давно и постоянно пользуюсь сервисом S3 от компании Amazon. Если по-простому, то это система хранения файлов с относительно низкими ценами (если просто хранить, а не давать другим много скачивать). Я уже давно использую Amazon S3 и как средство для личного резервного копирования, так и для размещения фотографий и других медиафайлов для моего tumblr.

Не так-то и очевидно, как разместить файл на Amazon S3. Во-первых, это не FTP и обычными программами не подключиться. Во-вторых, у Amazon S3 собственная особенная архитектура, состоящая из bucket, объектов (это файлы) и т.п. Поэтому очень важно пользоваться удобной программой, в который бы всё выглядело привычно, как будто бы мы подключились к обычному (s) FTP-серверу. Например, это дополнение к Firefox под названием S3Fox — отличное решение, но, к сожалению, иногда очень медленно работает и не умеет переименовывать файлы.

Недавно мне сказали о новой разработке по работе с сервисом Amazon S3 — CloudBerry Explorer. Хотя он ещё только развивается, но уже умеет очень много:

  • Возможность переименовывать объекты (файлы)
  • Улучшенная производительность при работе с большим количеством файлом и большими файлами
  • Поддержка сервиса streamincloud.com для кодирования видео в FLV на лету для Amazon S3
  • Поддержка команд PowerShell
  • Регистрация и соединение с любым количеством аккаунтов Amazon S3
  • Одновременная работа с любым количеством аккаунтов Amazon S3
  • Быстрое копирование между аккаунтами и buckets Amazon S3
  • Расшаривание buckets и файлов, расположенных на Amazon S3 с другими пользователями
  • Создание, просмотр и удаление S3 buckets
  • Копирование и перемещение файлов между Amazon S3 и локальным компьютером
  • Установка прав доступа
  • Автоматизация рутиных задач с Microsoft PowerShell
  • Создание внешних адресов URL
  • Перемещение и копирование в фоне
  • Поддержка MD5 для проверки файлов во время передачи на S3
  • Копирование файлов из проводника Windows
  • Поддержка сервиса Amazon CloudFront
  • Поддержка CNAME
  • Поддержка подписанных адресов URL, а также лимитированных по времени
  • Установка списков ACL к дочерним объектам

Большой список возможностей, особенно учитывая, что это бесплатная программа. Теперь о некоторых из этих функций и возможностей подробнее со скриншотами.

Программа работает пока только на Windows. Итак, начнём с первого запуска. Меня попросили зарегистрироваться (зачем это необходимо, мне пока неизвестно):

Регистрация программы CloudBerry Explorer

Регистрация программы CloudBerry Explorer

Сама программа выглядит как любой FTP-клиент: два окна для работы с файлами. С любой стороны можно открыть как локальный диск, так и любой buckets любого зарегистрированного аккаунта Amazon S3.

Вид CloudBerry

Вид CloudBerry

Также, как и в S3Fox, можно сохранить параметры сразу же для нескольких аккаунтов Amazon S3, но, в отличие от дополнения Firefox, можно соединиться одновременно с несколькими аккаунтами.

Ввод данных для Amazon S3

Ввод данных для Amazon S3

Возможность одновременного подключения реализована с помощью вкладок (табов) — точно также, как и в любом браузере:

Вкладки в CloudBerry Explorer

Вкладки в CloudBerry Explorer

Работа с программой очень проста. При подключении к своему аккаунта сразу можно перейти к buckets:

Список buckets

Список buckets

Самой важной особенностью программы, которую отличают её от других, я считаю возможность переименования объектов, то есть файлов. Мне очень не хватало такой функции ранее:

Переименование объекта в Amazon S3 с помощью CloudBerry Explorer

Переименование объекта в Amazon S3 с помощью CloudBerry Explorer

Стоит отметить и удобство в мелочах. Например, строка адреса реализована так, что папки являются ссылками, нажав на которые можно перейти в данную папку:

Адресная строка в CloudBerry Explorer

Адресная строка в CloudBerry Explorer

Кроме того, можно редактировать права доступа. Например, открыть доступ на запись другому пользователю Amazon. Но я заметил, что CloudBerry Explorer по-умолчанию добавляет пользователя streamincloud для возможности перекодирование видео-файлов в FLV на лету (сервис streamincloud.com). Да, это удобно, но всё-таки странно, что CloudBerry Explorer добавляет всё это самостоятельно:

Редактирование ACL

Редактирование ACL

Очень удобно реализована работа с получением адреса на собственный файл (объект):

Web URL

Web URL

Затем можно как получить публичный адрес (если права проставлены правильно), так и приватный. Хорошо, что сделали указание домена CNAME, хотя раньше я просто стирал часть адреса:

Создание адреса с CNAME

Создание адреса с CNAME

Также можно создать и адреса со «сроком годности»:

Создание приватной ссылки

Создание приватной ссылки

В конце отмечу работу с копированием между buckets и различными аккаунтами Amazon S3. Во-первых, это будет бесплатно (при соотвествующей настройке и размещении в одной зоне), во-вторых, это точно так же, как и работа с обычными файлами:

Настройка копирования между Amazon

Настройка копирования между Amazon

Теперь я пользуюсь в Windows этой программы для работы со своим аккаунтом Amazon S3. Надеюсь, что CloudBerry Explorer останется бесплатным. Кстати, ещё можно посмотреть из промо-ролик:

Метки: , , , , ,

Включение синхронизации с мобильными устройствами для Google Apps

Сегодня уже две записи, относящихся Google — думаю, что много. Тем не менее, в предыдущем посте я писал о том, что можно объединять контакты в адресной книге Google, а также синхронизировать их со своим мобильным телефоном.

Но, после того как я попробовал синхронизировать моё устройство Windows Mobile, у меня ничего не получилось. Оказывается, для тех, кто пользуется Службами Google в своём домене (Google Apps), надо самостоятельно включать такую возможность в панели управления.

Итак, чтобы включить возможность синхронизации мобильных устройств, надо зайти в панель управления, выбрать пункт Mobile (у меня английская версия):

Пункт Mobile в настройке

Пункт Mobile в настройке

И включить возможность синхронизации:

Включение синхронизации с мобильными устройствами

Включение синхронизации с мобильными устройствами

Теперь всё должно работать, если, конечно, настроить свой телефон. Спасибо блогу Google Apps.

Метки: , , , , , , ,

Объединение контактов Google

Мне нравится, когда всё в одном месте, и сделано так, что удобно пользоваться. Например, так реализована система контактов у Google — ей можно пользоваться во всех продуктах Google, а сама она достаточно удобна.

Но до сих пор была ужасная проблема. Если в адресной книге Google есть много записей одного человека, но с разными контактами, то их сложно объединить. Такое возникает, например, если у человека есть адрес электронной почты, а ещё потом добавляешь его в каком-нибудь icq-транспорте или импортируешь данные из другой адресной книги.

Я уже хотел сделать собственное объединение (это несложно, так как есть хорошее Contacts API). Однако, с последним обновлением в Google сделали возможность объединять контакты в адресной книге. Для этого надо выбрать необходимое число контактов:

Объединение контактов Google

Объединение контактов Google

Затем система сама всё распределит и предложит лучший вариант, который можно подредактировать. Но, как отмечают на официальном блоге Gmail, система автодополнения адреса при составлении письма пока работает не так, как хотелось бы.

Осталось только разобраться с большим количеством контактов. Ведь теперь появилась и синхронизация контактов со многими мобильными устройствами, включая Windows Mobile.

Метки: , , , , , , ,

Управление компьютером прямо в браузере

Полгода назад я писал о программе, сэкономившей мне много часовTeamviewer. С помощью этой прогрограммы можно легко управлять другим компьютером. Для этого достаточно знать всего лишь два числа: идентификатор и пароль. При этом не нужно задумывать о каких-либо дополнительных настройках, как это может быть с обычным VNC, так как Teamviewer сразу умеет работать и через прокси, и через NAT.

Недавно разработчики обновили клиент под Windows до четвёртой версии и одновременно открыли интересный онлайн-сервис. Именно о нём я и хочу рассказать.
Далее »

Метки: , , , , , , , ,

Flex Builder бесплатно для студентов

Недавно я захотел попробовать поразбираться в технологии Adobe Air, после того, как Adobe выпустила стабильную версию под Linux.

Оказывается, есть три возможных путей разработки приложения под Air:

  • Как Ajax-разработчик
  • Как Flex-разработчик
  • Как Flash-разработчик

С первым всё понятно: можно скачать бесплатную Aptana и начать создавать приложения. Но мне захотелось попробовать Flex Builder: ведь в нём можно и не только с Air работать.

Но Flex Builder Pro 3 стоит почти 250$. Я понимаю, что для некоторых это не проблема, но, тем не менее, я всегда стараюсь найти что-то легальное. Так оказывается, что Flex Builder Adobe распространяет для студентов бесплатно!

Для этого надо зайти на специальный сайт и ввести свои данные (также приложить отсканированный студенческий или ISIC).

Бесплатный Adobe Flex Builder для студентов

Бесплатный Adobe Flex Builder для студентов

На следующий день после того, как я всё заполнил, мне прислали регистрационный ключ. Теперь можно эксперементировать с AIR. Итак, ссылка на специальную страницу:

Метки: , , , , , , , , , ,

Типограф для WordPress

Я думаю, что многие знакомы с типографикой: она важна для правильно оформления текста.

  • Правильная кавычки — это «ёлочки».
  • Тире — это не дефис.
  • Минус (2−1) — это тоже не дефис.
  • Многоточие… совсем не три точки.
  • И другие правила

Но ведь многих символов просто нет на клавиатуре! Да, можно воспользоваться, например, типографской раскладкой Ильи Бирмана — но не у всех же она стоит.

Именно по этому и создаются т.н. типографы — специальные программы и скрипты, которые всё делают за вас. Например, поставили три точки, а программа — нужный символ.

Такая программа есть и для WordPress: WP Typograph Lite от Искариота.
Основная функциональность:

  • Правильные кавычки.
  • Длинное тире между словами — с запретом отрывать от предыдущего слова.
  • — Черта, — в диалогах.
  • Минус между цифрами 0–9.
  • Многоточие — тремя точками...
  • Убирает точку в конце заголовка страницы.
  • В тегах <code>, <pre> и <script> (и некоторых других) текст не изменяет.
  • В <code> автоматически заменяет < на &lt;, исправляет кавычки на машинописные для корректного копирования-вставки.
  • Заменяет функцию wpautop, исправляет ошибки визуального редактора со вставкой тегов.
  • Форматирует некоторые спецсимволы, такие как ½, ©, и др.
  • Делает ссылки в комментариях кликабельными (с http и www), автоматически сокращая анкор, если ссылка длинная.

У меня стоит. Рекомендую. Итак, основные ссылки:

Метки: , , , , , , ,

Google Short Links

Этой осенью Google включил Labs в Apps не только для своей почты, но и вообще во всём сервисе. Теперь там появляются новые интересные сервисы от различных разработчиков. В качестве примера я расскажу о Google Shortlinks.

Чтобы включить что-нибудь из Labs в Google Apps надо сначала, конечно, включить английский (US) интерфейс, а затем перейти по ссылке добавление новых сервисов (на этой же странице можно подключить Google App Engine или, например, недавно там появились контакты):

Добавление нового сервиса в Google Apps

Добавление нового сервиса в Google Apps

Затем нажать на ссылку See more services from Google Labs:

See more services from Google Labs

See more services from Google Labs

А уже там можно выбрать нужный сервис. Их пока всего три: Moderator, Short Links и Code Review:

Google Labs

Google Labs

Итак, мы включаем Short Links, указываем нужный нам адрес, прописываем всё в DNS и… а для чего нужен этот сервис? Это похоже на сервисы, подобные TinyURL: указываем длинную ссылку, а нам дают короткую. В принципе, это и есть полное описание. Кстати, Short Links написан на python и расположен на Google App Engine.

Google Short Links

Google Short Links

Однако, есть ряд преимуществ и существенных отличий:

  • Собственный домен для коротких ссылок.
  • Учёт количества переходов по ссылке (можно использовать для анализа чего-либо).
  • Личные ссылки (для удобства, что-то вроде быстрого набора).

Недавно добавились полезные букмарклеты, а также хэшированные ссылки (не надо самому придумывать короткую ссылку).

Я пользуюсь. Удобная замена TinyURL :)

Метки: , , , , , , , , , ,