google - python social auth rest framework
Github emite api 401, ¿por qué?(django) (2)
Estoy tratando de integrar los api de github en un proyecto. Creo que estoy siguiendo las reglas de oauth, y todo lo que se necesita y se menciona en http://develop.github.com/p/issues.html , pero parece que no funciona. No obtengo un mensaje de error detallado, solo un 401.
- Registré una aplicación oauth en github (api v2), y proporcioné la url de devolución de llamada.
- construyo la url de autenticación: https://github.com/login/oauth/authorize?client_id=...&redirect_uri=http://.../no_port/
- Ellos publican el código para mí (token de solicitud), lo cambio por token de acceso, funciona bien. Los problemas:
- Puedo ver mis propios problemas en mis propios repositorios, pero si solo soy un colaborador, es 401 (no autorizado)
- No hay forma de crear un nuevo problema, incluso en mi propio repositorio: POST: http://github.com/api/v2/json/issues/open/:user/:repo PARAMS: body = & login = & token = 6 & title =
implementaciones reales con django, python:
url = ''https://github.com/login/oauth/access_token?client_id=%(client_id)s&redirect_uri=%(redirect_uri)s&client_secret=%(client_secret)s&code=%(code)s'' % locals()
req = urllib2.Request(url)
response = urllib2.urlopen(req).read()
access_token = re.search(r''access_token=(/w+)'', response).group(1)
url = ''http://github.com/api/v2/json/issues/open/%(user)s/%(repo)s'' % locals()
params = urllib.urlencode({''login'': user, ''token'': access_token, ''title'': ''title'', ''body'': ''body''})
req = urllib2.Request(url, params)
try:
response = urllib2.urlopen(req)
except HTTPError, e:
return HttpResponse(''[*] Its a fckin %d'' % e.code)
except URLError, e:
return HttpResponse(''[*] %s/n'' % repr(e.reason))
else:
resp = json.loads(response.read())
No sé si es exactamente lo que necesita, pero este es el código que utilizo en uno de mis proyectos para abrir problemas:
def issue(self, channel, network, nick, user, title, repoName):
body = ''Issue sent from %s at %s by %s (registered as %s)'' % /
(channel, network, nick, user.name)
login = self.registryValue(''login'')
token = self.registryValue(''token'')
data=''title=%s&body=%s&login=%s&token=%s'' % (title, body, login, token)
url = ''http://github.com/api/v2/json/issues/open/'' + repoName
response = json.loads(urllib.urlopen(url, data=data).read())
id = response[''issue''][''number'']
return id
Podría ser el problema ..
params = urllib.urlencode(
{''login'': user, ''token'': access_token, ''title'': ''title'', ''body'': ''body''}
)
Usted especifica que el parámetro de título tiene el valor literal de ''título'', igual que ''cuerpo''.
¿Es posible que desee esto en su lugar? ..
params = urllib.urlencode(
{''login'': user, ''token'': access_token, ''title'': title, ''body'': body}
)