Делаем mash-up приложение на трэндах

Разделы

суббота, 5 мая 2012 г.

Сокращённые урлы

Вообщем последние штрихи (ну конечно не считая дизайна, который оставляет желать лучшего). Прикрутил обновления на твиттер, не совсем кроспостинг, а самое интересное, с твитами и ретвитами. Ну с ретвитами всё более мене обычно (см предыдущий пост), а в твитах длинные урлы не очень как-то смотрятся. Хорошо полазив в самом Twitter Api обнаружил что t.co твиттер оставил для внутреннего пользования. Поэтому пришлось поискать сторонние сервисы. Т.к. я попробовал не один попробую представить краткий обзор.

BitLy: Где-то здесь можно зарегистрироваться прямо через твиттер. И для того что бы сокращать урлы, надо получить ключ и логин. Внимательно: логин - это не имя в твиттере, а там где сcылки 'Public Timeline' вида: http://bitly.com/u/o_xxxxxxxxx.rss, можно определить свой логин, который начинается с 'o_'. Как им пользоваться без OAuth (c OAuth - курить я не стал) см. ниже:

from google.appengine.api import urlfetch
from urllib import quote, unquote, urlencode
import logging

try:
    import json
except ImportError:
    import simplejson as json

def bit_shorten(uri):
    params = {'login' : BITLY_LOGIN,
                                'apiKey' : BITLY_KEY,
                                'domain' : "bit.ly", 
                                'uri' : uri.encode('utf8'), 
                    }
    bit_url = "http://api.bit.ly/v3/shorten?%s" % urlencode(params, doseq=True)

    try:
        res = urlfetch.fetch(bit_url)
    except urlfetch.DownloadError, msg:
        logging.error(str(msg))
        return ""
            
    if res.status_code != 200:
        logging.error(res.status_code)
        return ""
        
    try:
        jj = json.loads(res.content)
    except Exception, msg:
        logging.error(msg)
        return ""
    
    if jj["status_txt"] != "OK":
        logging.error(jj["status_txt"])
        return ""
    else:
        return jj["data"]["url"]

Вообщем оно работало но не долго... Спустя сутки перестало, причины в чём же дело я выяснять не стал, толи лимит исчерпался, толи OAuth не подключён. Ждать когда это само собой рассосётся я не стал.

Google: Набрал в поиске кто ещё умеет сокращать урлы и на удивление наткнулся на гугл (Кто в твиттере сидит наверное видел ссылки вида goo.gl). Решил попробовать прикрутить его. Для начала идём сюда. Там можно выбрать любой API который предоставляет гугл. Я ограничился только 'Shorten URL'. Честно скажу я хотел сначала использовать OAuth с ключами от серверного приложения,  но "что-то пошло не так". И  быстро нашёл оправдание что мне не потоком же эти урлы сокращать (лимит в сутки там 1 000 000 запросов), и решил сделать без авторизации но с ключём (без ключа можно тоже слать, но лимит не известен). Выглядит это так:

from google.appengine.api import urlfetch
from urllib import quote, unquote, urlencode
import logging

try:
    import json
except ImportError:
    import simplejson as json

def gog_shorten(uri):
    params = {"key" : GOOGLE_KEY, "longUrl" : uri.encode('utf8')}
    gog_url = "https://www.googleapis.com/urlshortener/v1/url"
    headers = {"Content-Type" : "application/json"}
    payload = json.dumps(params)
    
    try:
        res = urlfetch.fetch(gog_url, method=urlfetch.POST, headers=headers, payload=payload)
    except urlfetch.DownloadError, msg:
        logging.error(str(msg))
        return ""
            
    if res.status_code != 200:
        logging.error(res.status_code)
        return ""
        
    try:
        jj = json.loads(res.content)
    except Exception, msg:
        logging.error(msg)
        return ""
    
    return jj["id"]
И это пока пашет... тьфу-тьфу-тьфу.

Комментариев нет:

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

Постоянные читатели

Copyright © trendec. Технологии Blogger.