您的位置:首页 > 产品设计 > UI/UE

使用 JIRA API 获取 Issue

2016-02-22 13:44 555 查看
如果要使用 JIRA 中的 issue 数据,登录系统是必须的。

往期回顾——普通模式使用 Python 登录 Jira :

import urllib2
import urllib

def loginJira():
''' if environment is required
proxy = {'http':'xxxproxy:xxxxx'}
proxy_support = urllib2.ProxyHandler(proxy)
opener = urllib2.build_opener(proxy_support)
urllib2.install_opener(opener)
'''

jiraUrl = "http://xxxxx.org/jira/login.jsp"
user_agent = "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36"
data_post = urllib.urlencode({
'os_username' : 'xxxx@xxxx.com',
'os_password' : 'xxxxx',
'os_destination' : '',
'user_role' : '',
'atl_token' : '',
'login' : 'Log In'
})#every data should be contained
headers = {'User-Agent' : user_agent}
request = urllib2.Request(url = jiraUrl, headers = headers, data = data_post)
response = urllib2.urlopen(request)
readPage = response.read()

print readPage

if __name__ == '__main__':
loginJira()

跟之前发布的一篇文章——爬虫入门:Python 描述的,data_post 中包含的数据必须一个不少的遵循页面中的信息。

API 模式下登入 JIRA 获得权限:

实际上 login 这一个功能隶属于权限这个大类:将会涉及到cookie、headers。

login 就是为了获取权限。

在这里,我采用的是 cookie-based 的方法来获取权限,我需要的是:

1. cookie name

2. cookie value

没有 cookie 信息你将会收到401报错——没有权限访问任何一个 JIRA 数据,所以我将cookie 的设置放在访问网站的第一步——login() 方法里面(当然,实际上放在其他地方也是可以的,只要是在你进入网站获取数据之前)。

所以 login 方法存在的意义就是,登录获取权限——

具体获取权限的步骤:

1.  install 一个cookie 的opener,实际上这种编写方式雷同于 install 一个代理(在爬虫入门:Python Q1 的代码中就有提到

cookie = cookielib.CookieJar()
chandler = urllib2.HTTPCookieProcessor(cookie)
opener = urllib2.build_opener(chandler)
urllib2.install_opener(opener)




*reference

当你获取一个URL你使用一个opener(一个urllib2.OpenerDirector的实例)。在前面,我们都是使用的默认的opener,也就是urlopen。它是一个特殊的opener,可以理解成opener的一个特殊实例,传入的参数仅仅是url,data,timeout。

如果我们需要用到Cookie,只用这个opener是不能达到目的的,所以我们需要创建更一般的opener来实现对Cookie的设置。



2. 通过 JIRA API 提到的方式构建 json 格式的密码 data,创建一个 request:
request = urllib2.Request(url = self.__maiUrl + api, data = account, headers = headers )
data 的格式
{ "username": "myuser", "password": "mypassword" }
headers的格式(因为 login 是起始步骤,所以headers 的格式很简单)

headers = {'Content-Type': 'application/json'}


3. 发送请求,得到 cookie 信息。

得到 cookie 信息实际上也有两种方式:

- 因为之前构建了cookie 的 opener,可以使用cookie 的opener ,当然也可以使用 urllib2.urlopen() 发送请求

response =opener.open( request )
cookie 信息直接写入到 cookie 变量中

- 发送请求之后,response 会有一个session 对象返回,cookie 就在 session 对象里面,注意这里返回的 session 是 json 类型的

json.load(response)
这就可以解码为字典格式:

json.load(response)['session']['name']
json.load(response)['session']['value']
从 login 方法获得的cookie 的 key,value 为后期操作 JIRA 数据提供权限——将得到的key,value 用于构建headers。

通过 API 获得 issue 信息:

访问网站要素:

- url —— 通过JIRA 官方 API查找到相关目的的 url,例如我需要 issue,它的 API
就是:GET /rest/api/2/issue/{issueIdOrKey}, 所以相关的 url 形如:

<pre name="code" class="python">maiUrl = 'http://hdc-tomcat123.xxxxsoft.org'
api = '/jira/rest/api/2/issue/LTY-%d?fields=summary,priority,assignee,updated' \ #fields = data you want
%bugkey
url = mailUrl + api



* maiUrl 就是对应的组织使用 jira 地址。

直接将此 url 放到浏览器地址栏可以直接得到数据,没有格式,但是如果 debug 需要可以在浏览器是有那个 ctrl + f 查找相关数据,很方便。

当然,使用在线格式化 json 数据的工具也是可以的。根据需要格式的数据类型查找工具,搜索关键字:json查看器,json校验,json格式化

- headers —— login 得到的 cookie (从 login 方法中获得的)存入到 headers 里面:

headers = {
'Content-Type': 'application/json',
authname : authvalue
#auth['session']['name']:auth['session']['value']
}
然后发送请求,得到响应——将相应的数据提取出来:

bug.setSummary( (data['fields']['summary'] ).encode('utf8'))
bug.setAssignee( (data['fields']['assignee']['displayName']).encode('utf8') )
因为可能提取的数据中会有一些迷之符号,最好转码一下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: