使用 JIRA API 获取 Issue
2016-02-22 13:44
555 查看
如果要使用 JIRA 中的 issue 数据,登录系统是必须的。
往期回顾——普通模式使用 Python 登录 Jira :
跟之前发布的一篇文章——爬虫入门: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 的代码中就有提到)
“
*reference
当你获取一个URL你使用一个opener(一个urllib2.OpenerDirector的实例)。在前面,我们都是使用的默认的opener,也就是urlopen。它是一个特殊的opener,可以理解成opener的一个特殊实例,传入的参数仅仅是url,data,timeout。
如果我们需要用到Cookie,只用这个opener是不能达到目的的,所以我们需要创建更一般的opener来实现对Cookie的设置。
”
2. 通过 JIRA API 提到的方式构建 json 格式的密码 data,创建一个 request:
headers的格式(因为 login 是起始步骤,所以headers 的格式很简单)
3. 发送请求,得到 cookie 信息。
得到 cookie 信息实际上也有两种方式:
- 因为之前构建了cookie 的 opener,可以使用cookie 的opener ,当然也可以使用 urllib2.urlopen() 发送请求
- 发送请求之后,response 会有一个session 对象返回,cookie 就在 session 对象里面,注意这里返回的 session 是 json 类型的
通过 API 获得 issue 信息:
访问网站要素:
- url —— 通过JIRA 官方 API查找到相关目的的 url,例如我需要 issue,它的 API
就是:GET /rest/api/2/issue/{issueIdOrKey}, 所以相关的 url 形如:
* maiUrl 就是对应的组织使用 jira 地址。
直接将此 url 放到浏览器地址栏可以直接得到数据,没有格式,但是如果 debug 需要可以在浏览器是有那个 ctrl + f 查找相关数据,很方便。
当然,使用在线格式化 json 数据的工具也是可以的。根据需要格式的数据类型查找工具,搜索关键字:json查看器,json校验,json格式化
- headers —— login 得到的 cookie (从 login 方法中获得的)存入到 headers 里面:
往期回顾——普通模式使用 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 = {'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') )因为可能提取的数据中会有一些迷之符号,最好转码一下。
相关文章推荐
- ui-router中使用$stateChangeStart来实现WEB用户登录跳转
- UISnapBehavior的简单使用
- [Android]android.util.AndroidRuntimeException: requestFeature() must be called before adding content
- 使用苹果自带的UIVideoEditController进行视频编辑
- iOS UIButton中的三个EdgeInsets属性
- [LeetCode] Count Univalue Subtrees 计数相同值子树的个数
- UWP应用开发系列视频教程简介 - Built for Windows 10
- Easyui 让Window弹出居中与最大化后居中
- Easyui 让DataGrid适应浏览器宽度
- UITableView编辑单元格多个按钮(4)
- 《深入理解SPARK:核心思想与源码分析》——SparkContext的初始化(仲篇)——SparkUI、环境变量及调度
- collectionview resueview 重影的问题
- 20.UIImageView之内容模式(contentMode)
- iOS - UIButton(UIEdgeInsets)/设置button上的文字和图片上下垂直居中对齐
- NGUI UILabel计算文字行数
- 19.UIImage之渲染模式(renderingMode)
- Spark官方文档《Spark Programming Guide》解读
- 本地推送UILocalNotification
- UITableViewCell高度自适应
- Java基础之continue, break, return