Acesse a API do Highrise com Python?
Pergunta
Como posso acessar a API do 37 Signals Highrise com Python? Encontraram invólucros para PHP/Ruby, mas não Python. Estou escrevendo meu próprio agora, alguém tem conselhos sobre como superar o primeiro obstáculo de autenticação com Python?
Solução
Eu escrevi (estou escrevendo, na verdade) um invólucro de API do Highrise para Python. Ele usa objetos Python para cada uma das classes Highrise e funciona muito como o Django Orm:
>>> from pyrise import *
>>> Highrise.server('my-server')
>>> Highrise.auth('api-key-goes-here')
>>> p = Person()
>>> p.first_name = 'Joe'
>>> p.last_name = 'Schmoe'
>>> p.save()
Você pode obter a fonte do Github: https://github.com/feedmagnet/pyise
Ou instale -o de Pypi:
$ sudo pip install pyrise
Outras dicas
Eu estava apenas abordando esse problema quando tropecei em sua pergunta. Aqui está o que eu invadi até agora. Ainda não é bonito (ainda), mas funciona. Não conheço pycurl e depois de olhar por um tempo, voltei ao urllib2. O HighRise usa autenticação básica para que você não precise usar o CRO, você pode usar o URLLIB2. Você só precisa passar por todas as etapas do gerente do PWORD. A saída é um arquivo XML longo de todas as empresas ou das pessoas, dependendo da URL que você insere. Se você quisesse apenas uma pessoa, poderia fazer algo como 'http ....../pessoas/123.xml' ou 'http ....../people/123-fname-lname.xml' (como você vê no URL quando você realmente entra em contato no Highrise com o .xml adicionado).
import ullib2
PEOPLEurl = 'http://yourcompany.highrisehq.com/people.xml' #get all the people
# or
COMPANYurl = 'http://yourcompany.highrisehq.com/company.xml' #get all companies
token = '12345abcd' #your token
password = 'X'
passmanager = urllib2.HTTPPasswordMgrWithDefaultRealm()
passmanager.add_password(None, PEOPLEurl, token, password)
authhandler = urllib2.HTTPBasicAuthHandler(passmanager)
opener = urllib2.build_opener(authhandler)
urllib2.install_opener(opener)
page = urllib2.urlopen(PEOPLEurl).read()
print page #this will dump out all the people contacts in highrise
Qualquer feedback ou sugestão sobre isto O código seria útil!
Ver aqui sobre como fazer autenticação básica. Também suportes iirc urllib http://user:password@example.com
URLs.
Eu estava apenas olhando para o código PHP de um dos invólucros de api php E vejo que eles usam Curl; Então você já olhou para pycurl ??
Sobre a autenticação aqui está um exemplo com o qual você pode começar (não é testado) ...
import pycurl
def on_receive(data):
# process your data here
pass
def connetion(url, token)
conn = pycurl.Curl()
# Set Token.
conn.setopt(pycurl.USERPWD, "%s:x" % (token,))
# the format TOKEN:x i get it from the PHP wrapper because usually the
# format should be USER:PASSWD so here i think they just use a token as
# a USERname and they set the password to 'x'.
conn.setopt(pycurl.URL, url)
# Set the XML data to POST data.
conn.setopt(pycurl.POSTFIELDS, XML_DATA)
# Add SSL.
conn.setopt(pycurl.SSL_VERIFYPEER, 0)
conn.setopt(pycurl.SSL_VERIFYHOST, 0)
# Set function that will be called as soon as the data is received.
conn.setopt(pycurl.WRITEFUNCTION, on_receive)
# Perform the data transfer.
conn.perform()
if __name__ == '__main__':
connection("http://yourcompany.highrisehq.com", your_token)