2017-07-05 49 views
0

如何使用python API将文件从本地计算机发送到hipchat?我目前正在使用Hypchat,但它没有很好的记录。Python:如何将文件发送到hipchat?

这是到目前为止我的代码:

import hypchat 

hc = hypchat.HypChat("myKey") 

room = hc.get_room('bigRoom') 

我不知道如何着手。我尝试过其他方法,例如this之一,但我不断收到错误:

[ERROR] HipChat file failed: '405 Client Error: Method Not Allowed for url: https://api.hipchat.com/v2/room/bigRoom/share/file' 
+0

愚蠢的问题 - 但你可以不使用Python来执行这个任务吗?如果没有,那么它可能是权限问题。您是否提供了/是否有任何所需的授权令牌? – MattR

+0

嗨,是的,我可以在没有Python的情况下执行它。 – user1367204

回答

0

此代码可以让我的任何文件发送到hipchat房间:

# do this: 
#  pip install requests_toolbelt 

from os    import path 
from sys    import exit, stderr 
from requests   import post 
from requests_toolbelt import MultipartEncoder 


class MultipartRelatedEncoder(MultipartEncoder): 
    """A multipart/related encoder""" 
    @property 
    def content_type(self): 
     return str('multipart/related; boundary={0}'.format(self.boundary_value)) 

    def _iter_fields(self): 
     # change content-disposition from form-data to attachment 
     for field in super(MultipartRelatedEncoder, self)._iter_fields(): 
      content_type = field.headers['Content-Type'] 
      field.make_multipart(content_disposition = 'attachment', 
           content_type  = content_type) 
      yield field 




def hipchat_file(token, room, filepath, host='api.hipchat.com'): 

    if not path.isfile(filepath): 
     raise ValueError("File '{0}' does not exist".format(filepath)) 


    url      = "https://{0}/v2/room/{1}/share/file".format(host, room) 
    headers     = {'Content-type': 'multipart/related; boundary=boundary123456'} 
    headers['Authorization'] = "Bearer " + token 



    m = MultipartRelatedEncoder(fields={'metadata' : (None, '', 'application/json; charset=UTF-8'), 
             'file'  : (path.basename(filepath), open(filepath, 'rb'), 'text/csv')}) 

    headers['Content-type'] = m.content_type 

    r = post(url, data=m, headers=headers) 

if __name__ == '__main__: 

    my_token = <my token> 
    my_room = <room name>  
    my_file = <filepath> 

    try: 
     hipchat_file(my_token, my_room, my_file) 
    except Exception as e: 
     msg = "[ERROR] HipChat file failed: '{0}'".format(e) 
     print(msg, file=stderr) 
     exit(1) 

喊出@Martijn皮特斯

相关问题