2014-02-25 55 views
2

我有一些python工具,我想將更新發送到hipchat房間。我在別處用shell腳本來做這件事,所以我知道它適用於我們的環境,但我似乎無法將令牌推送到hipchat API。得到一些簡單的東西。如何發佈到pychat的hipchat

首先,這驗證正確,並提供了一個消息:

curl -d "room_id=xxx&from=DummyFrom&message=ThisIsATest&color=green" https://api.hipchat.com/v1/rooms/message?auth_token=yyy 

但是當我嘗試使用Python「請求」模塊,我被卡住。

import requests 
room_id_real="xxx" 
auth_token_real="yyy" 
payload={"room_id":room_id_real,"from":"DummyFrom","message":"ThisIsATest","color":"green"} 
headerdata={"auth_token":auth_token_real,"format":"json"} 
r=requests.post("https://api.hipchat.com/v1/rooms/message", params=payload, headers=headerdata) 
print r.ok, r.status_code, r.text 

這裏是我的錯誤信息:

False 401 {"error":{"code":401,"type":"Unauthorized","message":"Auth token not found. Please see: https:\/\/www.hipchat.com\/docs\/api\/auth"}} 

基本上我似乎沒有被通過認證令牌正常。我怎樣才能得到這個工作?

+1

在你的'curl'例如你通過認證庫的正式名單令牌在查詢字符串參數中,而在您的Python示例中,您將它作爲標題值傳遞。既然你的'curl'提交工作正常,你是否試過在Python查詢字符串中包含該標記? – lanzz

回答

1

正如Ianzz所說,嘗試將其包含在URL查詢字符串中。儘管笨重(你可能想要哈希!),但它確實有效。

另一個奇怪的怪癖是你通過Hipchat獲得的代幣;今天晚上我用自己的個人令牌解決了問題;它似乎對應於API的v2 beta。如果您通過Group Admin進入並從那裏獲取令牌,可能會有所幫助。

舊的問題是舊的。

+0

不接受這個答案,因爲我認爲更好的是(或至少應該)在那裏。但這正是我現在正在做的。 –

4

如果有幫助,這裏有一個可用的V2 API示例。我確實發現V2 API對請求的形式完全正確有點更敏感。但是,它可能更符合V2 API的前瞻性(儘管原來的問題似乎與V1有關)。

#!/usr/bin/env python 
import json 
from urllib2 import Request, urlopen 

V2TOKEN = '--V2 API token goes here--' 
ROOMID = --room-id-nr-goes-here-- 

# API V2, send message to room: 
url = 'https://api.hipchat.com/v2/room/%d/notification' % ROOMID 
message = "It's a<br><em>trap!</em>" 
headers = { 
    "content-type": "application/json", 
    "authorization": "Bearer %s" % V2TOKEN} 
datastr = json.dumps({ 
    'message': message, 
    'color': 'yellow', 
    'message_format': 'html', 
    'notify': False}) 
request = Request(url, headers=headers, data=datastr) 
uo = urlopen(request) 
rawresponse = ''.join(uo) 
uo.close() 
assert uo.code == 204 
2

另一個基本的例子使用要求:

import requests, json 

amessage = 'Hello World!' 
room = 'https://api.hipchat.com/v2/room/18REPLACE35/notification' 
headers = {'Authorization':'Bearer UGetYourOwnAuthKey', 'Content-type':'application/json'} 
requests.post(url = room, data = json.dumps({'message':amessage}), headers = headers)