当前位置: 首页 > 编程日记 > 正文

如何利用 C# 爬取 One 持有者返利数据!

去年,10月份写过一篇图文 「One」的投资价值分析,多半年过去了,回头看看当时的判断还是合理的。

ONE的K线图

投资这种事情需要有自己的策略,更需要理性。任何决策都需要以数据作为判断的基础,哪么是否还继续持有 ONE呢?

首先,看整个市场的环境,从我们每周日发布的数据来看,币圈这个市场还处于不温不火的状态。这个时候,我是不会动的,对 BTC、EOS 还是会采用定投的策略来积累这些数字资产。另外,我也会结合 BTC、ONE 的价格,以及 ONE 的返利数据去计算,如果按照当前的价格买入并持有 ONE,并按照现在的返利,其年化利率是多少,是否满足我的要求,如果满足就继续定投,如果不满足就拿着不动,等待机会。

One持有者返利数据列表


以上是我的想法,但仅有想法是不够的,需要数据来做支撑。所以今天就带着大家来爬取 One 持有者返利数据,根据这份数据来为自己提供辅助决策。

网页上面我们已经看到了,其对应的网址是:

https://b1.run/one/holder/bonus

查看源代码,我们发现在源码中并不包含这些数据,断定该网站是采用“前后端分离”的方式开发,所以我们需要找到请求 JSON 数据的接口。

通过 chrome 浏览器的开发者工具,我们发现该入口为:

https://b1.run/api/graphql

Json数据入口

通过不断的加载数据,我们发现,前50条数据的网络请求参数如下:

第一个50条记录

接下来50条数据的网络请求参数如下:

第二个50条记录

以此类推,我们发现主要是after:" "后面的参数不同,找到请求数据的规律就好办了。我们再来看看返回的数据。

Json数据

从返回的Json数据,可看到我们需要的信息存储在 edges 集合中,通过 edge 内部的 node 结构变量来存储。


为了快速完成爬取 One 持有者返利数据的任务,我使用了两套开源代码,RestSharpNewtonsoft.Json

RestSharp

利用该开源代码可以得到网络请求之后的 Json 数据,其下载地址如下:

https://github.com/restsharp/RestSharp

RestSharp

Newtonsoft.Json

利用该开源代码可以对得到的 Json 数据进行反序列化,得到 C# 对应的类,其下载地址如下:

https://github.com/JamesNK/Newtonsoft.Json

Newtonsoft.Json


Newtonsoft.Json 这套开源代码,我在 如何利用 C# 爬取「猫眼电影专业版:票房」数据! 以及 如何做一款「桌面版百度翻译」软件? 中使用过,以前网络请求部分都是通过 HttpWebRequest直接写的,这次偷懒使用了 RestSharp 这套开源代码。

如果大家对这两套开源代码感兴趣,给我留言,我再来写几篇图文介绍它们,下面来看看爬取 One 持有者返利数据的代码。

1. 构造One持有者返利数据的存储结构 JsonOne

public class JsonOne
{public Data data;
}public class Data
{public OneDailyStatisticHistory oneDailyStatisticHistory;
}public class OneDailyStatisticHistory
{public OneDailyStatistic oneDailyStatistic;
}public class OneDailyStatistic
{public List<Edges> edges;
}public class Edges
{public Node node;
}public class Node
{/// <summary>/// ONE 累计解冻 (ONE)	/// </summary>public double unfrozenOne;/// <summary>/// 总手续费折合(BTC)/// </summary>public double totalFeeBtc;/// <summary>/// 日期/// </summary>public string statisticalDate;/// <summary>/// 连续持有 1,000,000 ONE 预计返利折合(BTC)/// </summary>public double revenue100wBtc;/// <summary>/// 全平台各账户持有 ONE 平均值的总和(ONE)/// </summary>public double oneSnapshot24Avg;public double oneAvgPrice;public override string ToString(){return statisticalDate + "," + totalFeeBtc+ "," + unfrozenOne + ","+ oneSnapshot24Avg + ","+ revenue100wBtc;}
}

2. 构造请求的Body部分。

private string GetBody(int page)
{string temp = string.Empty;if (page == 1)temp = ",\"after\":\"NTA\"";else if (page == 2)temp = ",\"after\":\"MTAw\"";else if (page == 3)temp = ",\"after\":\"MTUw\"";string result = "{\"operationName\":null,\"variables\":{\"first\":50" + temp + "},"+ "\"query\":\"query($first: Int, $after: String, $last: Int, $before: String) "+ "{\\n oneDailyStatisticHistory {\\n oneDailyStatistic"+ "(first: $first, after: $after, last: $last, before: $before) "+ "{\\n edges {\\n cursor\\n node {\\n...OneDailyStatistic\\n"+ " __typename\\n        }\\n __typename\\n      }\\n "+ "pageInfo {\\n endCursor\\n startCursor\\n hasNextPage\\n "+ "hasPreviousPage\\n __typename\\n      }\\n "+ "__typename\\n    }\\n __typename\\n  }\\n}\\n\\n"+ "fragment OneDailyStatistic on OneDailyStatistic "+ "{\\n oneAvgPrice\\n oneSnapshot24Avg\\n statisticalDate\\n unfrozenOne\\n "+ "revenue100wBtc\\n totalFeeBtc\\n __typename\\n}\\n\"}";return result;
}

3. 获取One持有者返利数据列表List<Edges>

public List<Edges> GetOneData(int page)
{RestClient client = new RestClient("https://b1.run/api/graphql");RestRequest request = new RestRequest(Method.POST);request.AddHeader("cache-control", "no-cache");request.AddHeader("Content-Type", "application/json");request.AddParameter("application/json",GetBody(page),ParameterType.RequestBody);IRestResponse response = client.Execute(request);string str = response.Content;StringReader sr = new StringReader(str);JsonTextReader jsonReader = new JsonTextReader(sr);JsonSerializer serializer = new JsonSerializer();JsonOne one = serializer.Deserialize<JsonOne>(jsonReader);List<Edges> lst = one.data.oneDailyStatisticHistory.oneDailyStatistic.edges;return lst;
}

4. 呈现One持有者返利数据

为了后面的分析,我做了一个 Winform 来呈现爬取的数据,并把这些数据通过折线图可视化。

输出结果1

可视化1

可视化2

可视化3

可视化4


到此为止,如何利用 C# 爬取 One 持有者返利数据就介绍完了。怎么样是不是很好玩儿!希望我的思路能够给大家以启发。今天就到这里吧!See You!


相关图文

  • 我们能否效仿李笑来的投资策略?
  • 赚钱是刚需,如何正确的交易股票?
  • 如何利用 C# 开发「股票数据分析软件」(上)
  • 如何利用 C# 开发「股票数据分析软件」(中)
  • 如何利用 C# 开发「股票数据分析软件」(下)

相关文章:

04.微博消息的语言检测

04.微博消息的语言检测 郑昀 201010 隶属于《02.数据解析》小节 大意是&#xff0c;封装Google语言检测ajax web service的接口&#xff0c;输入一段话&#xff0c;输出语言种类。这个方法是从RssMeme.com看来的&#xff0c;经测试效果还不错&#xff0c;可用于检测微博客消息的…

CIO时代学院院长姚乐:传统行业遇上大数据 拥抱智能化未来

近几年&#xff0c;互联网行业发展突飞猛进&#xff0c;“大数据”技术瞬间变得炙手可热&#xff0c;当然&#xff0c;对于发展中的大数据技术而言&#xff0c;很多行业都不会错失良机。近日&#xff0c;CIO时代学院院长、中国新一代IT产业推进联盟秘书长姚乐在“2016CIO时代中…

自动化测试的优势和局限性有哪些

自动化测试只是众多测试中的一种&#xff0c;并不比人工测试更高级更先进。和人工测试相比自动化测试有一定的优势和劣势&#xff0c;具体如下。 1.优势 (1)自动化测试具有一致性和重复性的特点&#xff0c;而且测试更客观&#xff0c;提高了软件测试的准确度、精确度和可信任度…

也分享一个存储过程代码生成器 开源

可以通过 FILE>OPTION 修改前缀&#xff0c;作者等信息。。。。。 完全傻瓜式应用&#xff0c;开源&#xff0c;方便进行个性化开发。。。 工具地址&#xff1a;http://spgen.codeplex.com/ Stored Procedure Generator (for SQL Server 2000/2005) 虽然这样写&#xff0c;但…

如何利用 C# 爬取BigOne交易所的公告!

在当今这个时代&#xff0c;投资可以说是每个人都应该学会的一项技能。拥有一些数字货币是程序员的信仰&#xff01;交易所是进入数字货币世界最方便的一扇门&#xff0c;今天我就带着大家爬取 Bigone 交易所的公告数据。 首先&#xff0c;我们来看一下要爬取的页面以及对应的…

如何提升自己的Web前端技术

如何提升自己的Web前端技术?问这个问题的一般都是有一些web基础的同学&#xff0c;还有一部分是自学的web前端技术&#xff0c;对自己目前的能力还比较模糊&#xff0c;下面小编就这个问题为大家做下详细的介绍。 如何提升自己的Web前端技术?在IT行业&#xff0c;任何一种专业…

tomcat 性能设置

Tomcat性能调优&#xff1a; 找到Tomcat根目录下的conf目录&#xff0c;修改server.xml文件的内容。对于这部分的调优&#xff0c;我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创建的线程数的设置&#xff0c;当然还有其他一些性能调优的设置&#x…

SAP的安装后基本设定

SAPLogon登录时候是乱码,设定登陆配置的代码页属性&#xff0c;勾选Unicode off SAP英文系统下中文显示乱码 设定字符集为GB2312 RZ10常用的配置参数rz10 编辑系统参数文件 rdisp/gui_auto_logout & rdisp/keepalive 用于控制闲置时间(秒) login/system_client 用于控制默认…

如何通过 Scratch 教小朋友编程思维?

寒假的时候&#xff0c;我带着自己的小孩学 Scratch&#xff0c;希望通过这种图形化的语言来训练他的编程思维。开学之后&#xff0c;很多事情需要处理&#xff0c;所以拖到现在才写总结。希望对大家有所启发。 在介绍如何做这件事情之前&#xff0c;先介绍一个学习方面的基本…

零基础怎么学习UI设计?有哪些简单的学习方法?

UI设计近几年的就业前景是非常好的&#xff0c;所以很多人都想要学习UI设计&#xff0c;那么零基础怎么学习UI设计?有哪些简单的学习方法?下面小编就给大家做下详细的介绍。 零基础怎么学习UI设计?有哪些简单的学习方法? UI设计行业是很注重技术的&#xff0c;零基础如果直…

让资源管理器不显示最近常用文件夹

右键点任务栏&#xff0c;点“属性”->Startmenu->在Privacy框中&#xff0c;把第二个√ 去掉&#xff0c;如下图所示&#xff1a;

C# 写Windows服务

服务是一个运行在后台的程序&#xff0c;他没有界面&#xff0c;不能交互&#xff0c;只能孤独的独自运行。 在开始->运行->输入services.msc可以打开服务管理器&#xff0c;这里可以查看和管理服务   很多时候都会用到服务&#xff0c;因为服务简化了我们的操作&#…

技术图文:如何利用 C# 爬取 ONE 的交易数据?

投资一个金融产品&#xff0c;最基本的就是拿到这个金融产品的交易数据&#xff0c;对这些数据进行可视化来判断趋势。去年&#xff0c;我在听 李笑来 讲区块链的课程上知道了 BigOne 这个由 INB 投资的交易所&#xff0c;而 ONE 是 BigOne 的平台币&#xff0c;持有 ONE 可享受…

java程序猿必读的学习书籍,良心推荐!

每年都有很多人想要学习java技术&#xff0c;有的是自学&#xff0c;有的是报班学习&#xff0c;但是都免不了要看书籍学习&#xff0c;书籍学习带来的知识更加牢记&#xff0c;也可以随时做笔记&#xff0c;下面小编就为大家推荐java程序猿必读的学习书籍&#xff0c;希望能帮…

Autools学习总结(一)

一、Makefile 简介 在编写C/C程序的时候&#xff0c;我们经常需要编译并运行代码。在程序规模较小的情况下&#xff0c;可以简单地直接调用编译器来完成这项工作。然而&#xff0c;在很多情况下程序往往包括大量的代码文件&#xff0c;手动调用编译器变得麻烦无比。尤其要命的是…

简单的实现IOCP服务器模型

其实已经有很多大佬将原理讲的十分详细了&#xff0c;所以就不花费时间将原理再一次重复讲一遍&#xff0c;有需要的可以自行去查看。 http://blog.csdn.net/beyond_cn/article/details/9336043 这篇文章是我看的&#xff0c;原理介绍十分详细。不过有一些操作感觉比较复杂因此…

资料分享:送你一本《数据结构与算法JavaScript描述》电子书!

数据结构 是掌握计算机编程必须具备的技能。通常情况下&#xff0c;我想掌握一门编程语言所用的方法就是利用这门语言把数据结构中线性表、栈、队列、字符串、动态数字、整数集合、树、图、搜索、排序等涉及的算法全部写一遍。写完之后&#xff0c;基本上就把这门语言搞定了。 …

Python中爬虫框架或模块的区别

Python中爬虫框架或模块的区别&#xff0c;我们在Python的学习过程中&#xff0c;需要不断的总结知识点&#xff0c;这样我们才能进步的更快一些。 (1)爬虫框架或模块 Python自带爬虫模块&#xff1a;urllib、urllib2; 第三方爬虫模块&#xff1a;requests&#xff0c;aiohttp;…

SQL SERVER 2000写存储过程出现列名无效的解决方法

举一个Northwind的例子。DECLARE m_LastName nvarchar(20) DECLARE Sql varchar(256)SET m_LastName Fuller SET Sql SELECT * FROM Employees WHERE LastName char(39) m_LastName char(39) EXEC(Sql) 注意&#xff0c;要加上char(39)就可以了。转载于:https://www.cnblo…

如何利用 C# + Python 破解猫眼电影的反爬虫机制?

在 如何利用 C# 爬取「猫眼电影&#xff1a;最受期待榜」及对应影片信息&#xff01; 这篇图文中可以看到猫眼电影对“本月新增想看人数” 和 “总想看人数”进行了字符集加密。 在 如何利用 C# 爬取「猫眼电影&#xff1a;国内票房榜」及对应影片信息&#xff01; 这篇图文中也…

ZooKeeper学习笔记1-----------安装启动

ZooKeeper是一套协作服务&#xff0c;主要用来构建分布式架构的应用&#xff0c;通过ZooKeeper我们可以安全的处理分布式应用下的局部故障问题。我们知道ZooKeeper就是Hadoop中的分布式协作服务组件。下面我们进入ZooKeeper的安装部署。 安装Zookeeper https://zookeeper.apach…

软件测试培训完就业方向怎么选择

软件测试技术在近几年的发展前景是非常好的&#xff0c;越来越多的人都想要学习软件测试技术&#xff0c;报班是大多数人的选择&#xff0c;但是大家对于“软件测试培训完就业方向怎么选择”这个问题比较迷茫&#xff0c;我们来看看下面的详细介绍。 软件测试培训完就业方向怎么…

LeetCode实战:合并两个有序链表

题目英文&#xff1a; Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists. Example: Input: 1->2->4, 1->3->4 Output: 1->1->2->3->4->4 题目中…

Apache反向代理设置【转载】

编译Apache时要进行的设置./configure --enable-mods-shared"all proxy"1>修改 httpd.conf 文件中&#xff1a;LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_connect_module modules/mod_proxy_connect.soLoadModule proxy_http_module modules…

Suricata的输出

不多说&#xff0c;直接上干货&#xff01; 见官网 https://suricata.readthedocs.io/en/latest/output/index.html 总的来说&#xff0c;Suricata采集下来的数据输出分为&#xff1a;EVE 、 Lua Output 、 Syslog Alerting Compatibility 、 Custom http logging 、 Custo…

快速提高你的UI设计水平的一些小技巧

UI设计师这个岗位在最近几年的缺口是比较大的&#xff0c;很多企业都在招UI设计人员&#xff0c;想要学习UI设计或者提升UI设计技术的同学&#xff0c;可以看看小编分享的以下内容&#xff0c;善用这些UI设计小技巧&#xff0c;快速提高你的设计水平! 快速提高你的UI设计水平的…

hibernate join fetch

那天去了达内&#xff0c;试听了2个小时的课&#xff0c;刚好讲的他们的当当网项目&#xff0c;讲hibernate表关系映射这段来了&#xff0c;不过也够呛&#xff0c;投影仪看的眼睛点都不舒服&#xff0c;当时讲的也没认真听&#xff0c;听了个大概&#xff0c;就记住那个老师一…

Java IO 字节流与字符流 (三)

概述 IO流用来处理设备之间的数据传输 Java对数据的操作时通过流的方式 Java用于操作流的对象都在IO包中 流按操作的数据分为&#xff1a;字节流和字符流 流按流向不同分为&#xff1a;输入流和输出流 IO流常用基类 字节流的抽象基类 InputStream&#xff0c;OuputStream 字符流…

LeetCode实战:两两交换链表中的节点

题目英文 Given a linked list, swap every two adjacent nodes and return its head. You may not modify the values in the list’s nodes, only nodes itself may be changed. Example: Given 1->2->3->4, you should return the list as 2->1->4->3.…

在UI设计中如何正确使用颜色

在我们进行UI设计时&#xff0c;颜色往往是我们表达理念重要的一点&#xff0c;但也是我们常常会忽视的一点。颜色其实如同语言一样&#xff0c;我们可以通过颜色的变化组合&#xff0c;来表达不同的情绪。 正确使用颜色不单能让我们吸引到客户&#xff0c;也能更好地表达我们的…