EVEOnline ESI Excel教程(2)
EVEOnline ESI Excel教程 (2)
A Chinese Guide on ESI request using Excel
1. 简介
本教程较长,因此分为两个部分:在教程1中介绍了使用Excel 2016以上版本获取玩家角色ESI数据的基本方法;本教程将着重介绍Power Query整理数据形成表格的方法。
引用知乎上的一段话: 什么是Power Query – 简单得不像超级查询实力派,https://zhuanlan.zhihu.com/p/25421658
- 首先说明一点:PowerQuery是以查询为主题而存在的。任何非以此主题为前提,用其他技术与之的对比都不合适。
- 如果你已经是轻松玩转VBA的”EXCEL高手”,这个工具将是一个极好的补充,可以替代大量编码时间,另外如果投资时间学习M语言(PowerQuery内置编程语言)将推开一个新的大门。
- 如果你是Excel初学者,需要向Excel导入数据而苦思怎么办,那PowerQuery正是你的最佳选择,没有之一。
可以说Excel是上手容易,精通难的典型。大多数人只用到Excel最简单的一些功能,直到发现还可以用Excel中还集成了Power Query这么强大的工具,才让我重新认识到Microsoft的强大。这篇博客将带领大家进入Power Query的神奇世界,开启eve sheet之门。
2. Power Query For EVEonline
废话不多说,直接进入正题。下面将从新建一个表格开始,搭建你第一个Excel For EVEOnline。首先下载初始表格:
访问 EVEOnline API网页 可能需要代理,这里推荐一家稳定机场,点击链接 Glados Network 用邮箱注册即可。
- 该机场支持全平台代理(Windows,Linux,Ios,安卓),
- 支持自动切换节点、去广告、路由器代理等功能
- WireGuard VPN支持游戏代理,包括香港、日本、美国节点,稳定速度快
- Pro订阅仅需30元/月,价格适中,500G高速流量,可访问Google,Youtube,XBOX游戏平台,是游戏代理的完美替代品
- 提供免费试用,软件和完善的售后,支持支付宝、Paypal、银行卡支付。
可以节省自己编写一些必要函数的时间,当然有时间的话您也可以依次点击[数据]
->[查询和连接]
,查看Excel文档中使用的函数。右侧显示的函数,可以通过[右键]
->[编辑]
查看源代码。
2.1 Excel准备知识
补补课,这部分如果没没注意的话,会给您后期处理表格数据带来极大的困扰,不要问我为什么知道…。
打开表格,可以看到在角色设定的标签,在这里有个Char_info的表格,如图所示。
这里大家要注意一个概念,就是普通区域和表格是不一样的。随便用鼠标框选若干的空白的单元格并不是表格,而只是一个区域,要想把一个区域转换为表格,您需要使用套用表格格式,请养成把“表包含标题”打上√的好习惯。
点确定以后,别忘记在左上角给表格起个名字,比如“这才是表格”否则你每新建一个表,Excel就会默认+1,这样到最后就是表1、表2、表3…当您需要调用某个表的数据时就会头疼了。
表格和区域最大的区别就是,当你点开数据标签的时候,点击筛选,第一排会显示出小箭头,表明您可以在后期设置一些条件屏蔽一些不想看到的数据。比如我只想看到大于20M小于200M的数据,就可以点击小箭头设置文本筛选,而普通区域是做不到的。
2.2 Power Query函数(下简称PQ)
为什么要使用函数?
假如你有几个角色,每个角色的ESI请求链接(包含Token和数字id)都不一样,您要每个都手动输入吗?您说没问题,好吧,next。
要知道每个ESI请求中的Token最多只能持续20mins,您还确定要自己手动输入?
当您日后逐渐了解ESI的查寻方式后,查寻链接之间都有规律可循,一般只有2个字符段有区别,因此在Power Query中设置的函数一般也就需要输入2个参数即可。Tutorial表格中已经内置一些常用的查询函数,在数据标签下点击“查询和连接”即可在右侧工具栏中看到。如果觉得函数功能不够可以自己添加,下面我来简单解释一下函数的编写方法。
2.2.1 输入一个参数
ESI查询有些是只需要一个参数的,比如在Function->GetOnePara下的函数“GetCharacterID”。
右键该函数->编辑->输入参数,在单元格内填入您的人物名后点击调用,您将看到您的数字id已经显示在列表里了;您也可以右键该函数->调用->输入参数,直接得到同样的结果。通过在PQ中使用“到表”进一步操作,可将该数据导出到新的表格中,后面再说详细的操作方法。
由于ESI有关游戏角色、公司等查询大多数都是以数字形式出现的,所以将人物名和公司名转换成数字id往往是第一步。关闭PQ界面,选择放弃保存,然后让我们来看看代码,右键该函数->编辑,在开始标签下点击高级编辑器得到如下界面。
让我们来看看代码:
1 | (CharacterName) => |
第一行“(CharacterName) =>”是输入的人名参数;
actualUrl是数据来源链接,&是连接符号,您可以理解为string中的+,相当于
这段代码实际查询链接为https://esi.evetech.net/latest/search/?categories=&search=你的人物名&strict=true,当您修改人物名的时候,链接将自动完成转换。
注意将strict选择为True!
不然就是这个效果:
像我的名字比较特殊,返回的结果只有3个(哈哈都是我的)。如果您的名字比较大众化,可能会返回更多的结果,这个时候就不知道哪个id是您的了。极端的, 您可以尝试输入名字为 chen,看看会返回多少个结果。
2.2.2 输入多个参数
大多数情况下,ESI查询需要输入2个参数(人物数字id和Token),因为这些数据比较私密比如查询市场数据,钱包等等。ESI除了要知道要查询的是哪个人(数字id),还需要验证这个人物是您所有(Token)。比如在Function->GetTwoPara下的函数“GetSellData”。调用的时候您会看到要求输入两个参数,ID以及token。好了,上面的内容已经告诉我们了ID是从ESI获取,而Token是从Postman获取的,因此这连个参数需要调用两个函数,一个是“GetCharacterID”,另外一个是“GetRefreshToken”。
进入高级编辑器看看代码:
1 | (ID, token)=> |
代码我们主要看前几行,“转换为表”及以后的是表格数据的后处理过程,您可以删除掉自己定义表格的处理方法。
双参数的写法“(ID, token)=>”, 表明有两个参数ID和token需要输入;
IDtext= Number.ToText(ID), 由于id是数字,而Token是字符串,当以参数同时出现时,PQ无法完成toString的强制转换,所以要手动转换一下,把ID转换成字符串;
*链接的实际地址将修改IDText以及(token)的值;
- Json.Document()和Web.Contents()的嵌套使用。Web.Contents()请求访问链接,而ESI链接返回的是Json格式的数据,因此需要用到Json.Document()函数。
我们来看看源的表现形式。这个是原始数据,您可以在这个窗口删减行列得到您最终的数据表格。
3. EVEonline “Hello World”
这里并不是指导您如何在表格里面显示出“Hello World”,前面说了那么多,最后还是要回到正题的,如何把Tutorial表格变成自己的。Let’s begin!
如果您已经完成教程1里面的内容,在下载好的表格char_info中填入,Char Name(你的人物名)以及Postman Token。
在Postman->Authorization->OAuth 2.0中,点击Available Tokens->Manage Tokens,把refresh_token粘贴到表格中。
下面我们将重现GetWalletBalance的获取过程。
- 将鼠标左击输入的人名以选择Char_info表格,然后点击数据->自表格区域,如下图。
- 在PQ编辑器中,选择添加列标签,点击调用自定义函数,出现选项如下图。新列名我取的ID,按图所示选好以后确定。
- 点击这个小箭头,并扩展到新行。
- 同理,点击调用自定义函数,功能查询选择GetRefreshToken,列取名token,refresh_token选择postman token。一路确认后,得到Token值
- 继续点击调用自定义函数,功能查询选择GetWalletBalance,token要改成列名后才能够在右边下拉框中选取。注意这里的token选项应为token,不要选成postman token
- 确定后可以得到,你可以删除多余的列,比如ID,Token等信息,只留下最后一列。文件->关闭并上载至,或者直接关闭并上载到一个新的表格即可。
- Excel会自动生成一个页,重命名即可。
- 如果你有多个人物,可以一次输入多行,然后一起处理。如下图
至此,EVEonline ESI用EXCEL获取数据的教程基本完整,如有反馈可在github下提交issues反馈问题。