using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Newtonsoft.Json;
namespace WindowsFormsApp1
{
public partial class BlackDuckTool : Form
{
public BlackDuckTool()
{
InitializeComponent(); ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
// Use SecurityProtocolType.Ssl3 if needed for compatibility reasons
}
string baseProjectUrl = "https://xxx.app.blackduck.com/api/projects/17d8b108-4e2d-4321-95ff-a967da407efd/versions/1c04aecf-ba41-41c4-8048-2b4fcf2d98a1/components?offset={0}&limit=100&sort=projectName%20ASC";
string linksPath = "C:\\BlackDuck_MatckLinks.txt"; private void btnDone_Click(object sender, EventArgs e)
{
getLinks();
ParseAllSourcePaths();
} void ParseAllSourcePaths()
{
string allPath = "";
List<string> listPath = new List<string>();
string links = File.ReadAllText(linksPath);
var oklinks = links.Split("\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
foreach (string l in oklinks)
{
if (string.IsNullOrEmpty(l)) { continue; }; var json = Httpget(l);
Matck.MatchObject mc = JsonConvert.DeserializeObject<Matck.MatchObject>(json);
if (mc != null && mc.items.Length > 0) {
mc.items.ToList().ForEach(
n => {
allPath+= n.filePath.path+"\r\n";
listPath.Add(n.filePath.path);
} ); }
} listPath.Sort();
allPath = "";
foreach (var s in listPath) {
allPath += s+"\r\n";
} File.WriteAllText("C:\\BlackDuckAllFilePath.txt",allPath); } private void getLinks()
{
string err = "";
int pageIndex = 0;
List<string> urlList = new List<string>();
for (int i = 0; i < 5; i++)
{
string url = string.Format(baseProjectUrl, pageIndex * 100);
string json = Httpget(url); if (json != "")
{ ResponseData data = JsonConvert.DeserializeObject<ResponseData>(json);
foreach (var d in data.items)
{
foreach (var o in d.origins)
{
o._meta.links.ToList().ForEach(n =>
{
if (n.rel == "matched-files")
{
if (!urlList.Contains(n.href))
{
urlList.Add(n.href);
}
};
});
} } }
else
{
err += (pageIndex + 1) + " failed\r\n"; }
pageIndex++; } string links = "";
foreach (var s in urlList)
{
links += s + "\r\n";
}
File.WriteAllText("C:\\BlackDuck_MatckLinks.txt", links); if (err != "")
{
MessageBox.Show(err); }
else
{
MessageBox.Show("get URLS OK");
} }
string Httpget(string url)
{ try
{
WebClient wc = new WebClient();
wc.Headers.Add("cookie", Properties.Resources.cookie); string s = wc.DownloadString(url);
wc.Dispose();
wc = null;
return s;
}
catch (Exception ex)
{ return ""; } }
} public class ResponseData
{
public int totalCount { get; set; }
public Item[] items { get; set; }
public object[] appliedFilters { get; set; }
public _Meta _meta { get; set; }
} public class _Meta
{
public string[] allow { get; set; }
public string href { get; set; }
public Link[] links { get; set; }
} public class Link
{
public string rel { get; set; }
public string href { get; set; }
public string name { get; set; }
public string label { get; set; }
} public class Item
{
public string componentName { get; set; }
public string componentVersionName { get; set; }
public string component { get; set; }
public string componentVersion { get; set; }
public int totalFileMatchCount { get; set; }
public License[] licenses { get; set; }
public Origin[] origins { get; set; }
public string[] usages { get; set; }
public string[] matchTypes { get; set; }
public DateTime releasedOn { get; set; }
public Licenseriskprofile licenseRiskProfile { get; set; }
public Securityriskprofile securityRiskProfile { get; set; }
public Versionriskprofile versionRiskProfile { get; set; }
public Activityriskprofile activityRiskProfile { get; set; }
public Operationalriskprofile operationalRiskProfile { get; set; }
public Activitydata activityData { get; set; }
public string reviewStatus { get; set; }
public string approvalStatus { get; set; }
public string policyStatus { get; set; }
public bool componentModified { get; set; }
public _Meta1 _meta { get; set; }
} public class Licenseriskprofile
{
public Count[] counts { get; set; }
} public class Count
{
public string countType { get; set; }
public int count { get; set; }
} public class Securityriskprofile
{
public Count1[] counts { get; set; }
} public class Count1
{
public string countType { get; set; }
public int count { get; set; }
} public class Versionriskprofile
{
public Count2[] counts { get; set; }
} public class Count2
{
public string countType { get; set; }
public int count { get; set; }
} public class Activityriskprofile
{
public Count3[] counts { get; set; }
} public class Count3
{
public string countType { get; set; }
public int count { get; set; }
} public class Operationalriskprofile
{
public Count4[] counts { get; set; }
} public class Count4
{
public string countType { get; set; }
public int count { get; set; }
} public class Activitydata
{
public DateTime lastCommitDate { get; set; }
public int newerReleases { get; set; }
public int contributorCount12Month { get; set; }
public int commitCount12Month { get; set; }
public string trending { get; set; }
} public class _Meta1
{
public string[] allow { get; set; }
public string href { get; set; }
public Link1[] links { get; set; }
} public class Link1
{
public string rel { get; set; }
public string href { get; set; }
} public class License
{
public string licenseDisplay { get; set; }
public string license { get; set; }
public string spdxId { get; set; }
public License1[] licenses { get; set; }
public string licenseType { get; set; }
} public class License1
{
public string licenseDisplay { get; set; }
public string license { get; set; }
public string spdxId { get; set; }
public object[] licenses { get; set; }
} public class Origin
{
public string name { get; set; }
public string origin { get; set; }
public string externalNamespace { get; set; }
public string externalId { get; set; }
public bool externalNamespaceDistribution { get; set; }
public _Meta2 _meta { get; set; }
} public class _Meta2
{
public object[] allow { get; set; }
public Link2[] links { get; set; }
} public class Link2
{
public string rel { get; set; }
public string href { get; set; }
} //--------------------- } namespace WindowsFormsApp1.Matck
{ public class MatchObject
{
public int totalCount { get; set; }
public Item[] items { get; set; }
public object[] appliedFilters { get; set; }
public _Meta _meta { get; set; }
} public class _Meta
{
public string[] allow { get; set; }
public string href { get; set; }
public object[] links { get; set; }
} public class Item
{
public Filepath filePath { get; set; }
public string[] usages { get; set; }
public _Meta1 _meta { get; set; }
} public class Filepath
{
public string path { get; set; }
public string archiveContext { get; set; }
public string compositePathContext { get; set; }
public string fileName { get; set; }
} public class _Meta1
{
public Link[] links { get; set; }
} public class Link
{
public string rel { get; set; }
public string href { get; set; }
} }

  

c# get all Blackfish match source file path list use API的更多相关文章

  1. Maven group, artifact or version defined in the pom file do not match the file ...

    在把library上传到bintray空间的时候报以下错误 Could not upload to 'https://api.bintray.com/content/ping/maven/comm-a ...

  2. 报错:Can't find a source file at "xxxxx“Locate the file or edit the source lookup path to include its location.

    调试问题: Can't find a source file at "/tmp/TI_MKLIB6sLCzz/SRC/exit.c" Locate the file or edit ...

  3. Solved Unable to copy the source file ./installer/services.sh to the destination file /etc/vmware-t

    Sometimes when you intall vmwaretools there will be some problems such as "Unable to copy the s ...

  4. (转)Eclipse - CDT使用GDB调试C++的问题-无源文件命名(No source file named)

    http://tech.ddvip.com/2014-09/1411618782213496.html Eclipse CDT调试C++, 使用的Unix的调试器GDB; 由于在Unix下, 文件的目 ...

  5. eclipse调试(debug)的时候,出现Source not found,Edit Source Lookup Path,一闪而过

    问题描述 使用Eclipse调试代码的时候,打了断点,经常出现Source not found,网上找了半天,大部分提示点击Edit Source Lookup Path,添加被调试的工程,然而往往没 ...

  6. [LeetCode] Longest Absolute File Path 最长的绝对文件路径

    Suppose we abstract our file system by a string in the following manner: The string "dir\n\tsub ...

  7. Longest Absolute File Path

    Suppose we abstract our file system by a string in the following manner: The string "dir\n\tsub ...

  8. Error: pathspec '*' did not match any file(s) known to git.

    git切换分支报错 error: pathspec 'develop' did not match any file(s) known to git. 解决办法如下: plumm@MACY-PC MI ...

  9. Leetcode: Longest Absolute File Path

    Suppose we abstract our file system by a string in the following manner: The string "dir\n\tsub ...

  10. eclipse debug时老提示edit source lookup path解决方案

    用myeclipse debug web应用的时候,总提示edit source lookup path,每次都得手动选择项目,费时费力.在网上终于找到了方法. 搬运:http://www.educi ...

随机推荐

  1. C# 单例模式的多种实现

    单例模式介绍 单例模式是一种创建型设计模式,它主要确保在一个类只有一个实例,并提供一个全局访问点来获取该实例.在C#中,有多种方式实现单例模式,每种方式都有其特定的使用场景和注意事项. 设计模式的作用 ...

  2. 开源 - Ideal库 - 枚举扩展设计思路及实现难点(三)

    今天想和大家分享关于枚举扩展设计思路和在实现过程中遇到的难点. 01.设计思路 设计思路说起来其实也很简单,就是通过枚举相关信息:枚举值.枚举名.枚举描述.枚举项.枚举类型,进行各种转换,通过一个信息 ...

  3. importlib 用法

    首先看一下importlib.import_module(name, package=None)函数的参数 函数调用存在两种方式: 1.绝对导入,name为完整路径str,package为None. ...

  4. Golang之学习资源参考

    使用golang开发也有一段时间,在此总结一些自己从0入门到掌握所涉及一些资源,希望可以帮助其他人 [初级] 基础语法练习:  https://gobyexample.com/ [中级] 1.gola ...

  5. Nginx之yum安装

    使用yum进行nginx的安装 参考官网:http://nginx.org/ 1)选择对应系统,例如自己使用的是centos系统 2)配置并安装 sudo yum install yum-utils ...

  6. Vue项目“TypeError: Cannot read property ‘_wrapper’ of undefined

    前情 最近在开发一个H5营销活动项目,为了更高的开发效率我使用了Vue全家桶来实现. 坑位 在开发中遇到一个奇怪报错(报错截图如下),从提示看也定位不到是哪里出问题 Why? 在报错的页面仔细看了一遍 ...

  7. 树莓派4B 微雪7寸触摸屏 双屏 触摸屏校正

    树莓派4B+微雪7寸触摸屏+PC显示器,以触摸屏位主显示,PC显示器扩展,这时会有触摸不准的情况. 通过观察可以发现触摸被放大到了整个屏幕,即触摸屏+PC显示器. 1. 通过查看2个屏幕分辨率和位置, ...

  8. 【矩阵压缩】codeforces 1980 E. Permutation of Rows and Columns

    题目链接 https://codeforces.com/problemset/problem/1980/E 题意 共输入\(T\)组测试用例,每组测试用例第一行输入两个整数\(n, m\),分别代表输 ...

  9. 鸿蒙NEXT开发案例:经纬度距离计算

    [引言] 在鸿蒙NEXT平台上,我们可以轻松地开发出一个经纬度距离计算器,帮助用户快速计算两点之间的距离.本文将详细介绍如何在鸿蒙NEXT中实现这一功能,通过简单的用户界面和高效的计算逻辑,为用户提供 ...

  10. HarmonyOS Next 入门实战 - 文字转拼音,文字转语音

    文字转拼音 安装 pinyin4js 三方库 ohpm install @ohos/pinyin4js pinyin4js 提供了以下接口: ● 文字转拼音(带声调和不带声调) ● 文字转拼音首字母 ...