git.oschina的issues导出为excel

用git.oschina.net 作为团队的代码仓库服务一年多,总体来说还是比较稳定的。

小团队开发为了简便快捷,在测试阶段直接用git.oschina的issues管理。

基本上对于小团队而言足够了,可以代替jira这样的专业工具。

但是在项目结题验收时遇到个小问题:验收文档中需要提供测试用例,之前用jira管理可以方便地导出excel或其他可阅读离线文档。git.oschina的issues管理缺少相应的功能。

经咨询git.oschina运维人员,获知可以拿到atom规范的feed。但只能分页获取,手工操作仍然麻烦,所以写了个java小工具类,用于分页抓取git.oschina的issues,并生成excel文档。

抓取使用了Rome库,生成excel使用了poi库。

工具类如下:

package cm.util;

import java.io.File;
import java.io.FileOutputStream;
import java.net.URL;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CreationHelper;

import com.sun.syndication.feed.synd.SyndEntry;
import com.sun.syndication.feed.synd.SyndFeed;
import com.sun.syndication.io.SyndFeedInput;
import com.sun.syndication.io.XmlReader;


public class GitFeed {
/**
 * 	
 * @param fpath 导出的excel路径
 * @param git_url git.oschina.net 上的issues访问路径,注意项目应设置为开放访问
 * @param page 抓取issues总页数
 * @throws Exception
 */
	public static void toExcel(String fpath, String git_url, int page) throws Exception{
		File resultFile = new File(fpath);
		HSSFWorkbook wb =new HSSFWorkbook(); 
		HSSFSheet sheet = wb.createSheet("Sheet1");  
		HSSFRow row;
		int row_pos=0;
		CellStyle cellStyle = wb.createCellStyle();
		CreationHelper createHelper = wb.getCreationHelper();
		cellStyle.setDataFormat(
		    createHelper.createDataFormat().getFormat("m/d/yy h:mm"));
		
		for(int i=1; i<page+1; i++){
			String rss = git_url;
			if(page>1)
				rss+="&page="+i;
            URL url = new URL(rss);
            // 读取Rss源   
            XmlReader reader = new XmlReader(url);
            
            System.out.println("Rss源的编码格式为:" + reader.getEncoding());
            SyndFeedInput input = new SyndFeedInput();
            // 得到SyndFeed对象,即得到Rss源里的所有信息   
            SyndFeed feed = input.build(reader);
            //System.out.println(feed);
            // 得到Rss新闻中子项列表   
            List entries = feed.getEntries();
            // 循环得到每个子项信息   
			
            for (int j = 0; j < entries.size(); j++) {
    			row = sheet.createRow(row_pos++);
    			int cell_pos=0;

                SyndEntry entry = (SyndEntry) entries.get(j);
                // 标题、连接地址、标题简介、时间是一个Rss源项最基本的组成部分   
				HSSFCell cell = row.createCell(cell_pos++);  
				cell.setCellValue(entry.getTitle());  
                System.out.println("标题:" + entry.getTitle());
                
                cell = row.createCell(cell_pos++);  
				cell.setCellValue(entry.getLink());  
                System.out.println("连接地址:" + entry.getLink());
                
/*                SyndContent description = entry.getDescription();
                cell = row.createCell(cell_pos++);  
				cell.setCellValue(description.getValue());                 
                System.out.println("标题简介:" + description.getValue());
*/                
                
                cell = row.createCell(cell_pos++);  
                cell.setCellStyle(cellStyle);
				cell.setCellValue( entry.getUpdatedDate());                 
                System.out.println("发布时间:" + entry.getUpdatedDate());
                
                
                // 以下是Rss源可先的几个部分   
                cell = row.createCell(cell_pos++);  
				cell.setCellValue( entry.getAuthor());                 
                System.out.println("标题的作者:" + entry.getAuthor());
            }
		}			
			
		FileOutputStream fos = new FileOutputStream(resultFile);  
        // save workbook  
        wb.write(fos);  
        fos.flush();  
        fos.close();  
        wb.close();
	} 
	
	public static void main(String[] args) throws Exception {
		GitFeed.toExcel("/Users/c4w/git/azutil/azutil/resource/cl.xls",
				"https://git.oschina.net/chengxj/cl/issues.atom?assignee_id=&issue_search=&label_name=&milestone_id=&scope=&sort=&status=all",
				21);
	}

}

 

猜你喜欢

转载自chen4w.iteye.com/blog/2252421