EVEOnline ESI Excel教程(2) | 畅游星海 | Steam | Dota2 | EVEOnline |
logo头像

畅游星海

EVEOnline ESI Excel教程(2)

Eve_esi

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的表格,如图所示。
图1
这里大家要注意一个概念,就是普通区域表格是不一样的。随便用鼠标框选若干的空白的单元格并不是表格,而只是一个区域,要想把一个区域转换为表格,您需要使用套用表格格式,请养成把“表包含标题”打上√的好习惯。
图2
点确定以后,别忘记在左上角给表格起个名字,比如“这才是表格”否则你每新建一个表,Excel就会默认+1,这样到最后就是表1、表2、表3…当您需要调用某个表的数据时就会头疼了。
图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”。
图4
右键该函数->编辑->输入参数,在单元格内填入您的人物名后点击调用,您将看到您的数字id已经显示在列表里了;您也可以右键该函数->调用->输入参数,直接得到同样的结果。通过在PQ中使用“到表”进一步操作,可将该数据导出到新的表格中,后面再说详细的操作方法。
图5
由于ESI有关游戏角色、公司等查询大多数都是以数字形式出现的,所以将人物名和公司名转换成数字id往往是第一步。关闭PQ界面,选择放弃保存,然后让我们来看看代码,右键该函数->编辑,在开始标签下点击高级编辑器得到如下界面。
图6

让我们来看看代码:

query
1
2
3
4
5
6
7
8
9
(CharacterName) =>

let
actualUrl = "https://esi.evetech.net/latest/search/?categories=character&search="& (CharacterName) &"&strict=true",
result = Web.Contents(actualUrl),
#"Imported JSON" = Json.Document(result,65001),
access_token = #"Imported JSON"[character]
in
access_token
  • 第一行“(CharacterName) =>”是输入的人名参数;

  • actualUrl是数据来源链接,&是连接符号,您可以理解为string中的+,相当于

这段代码实际查询链接为https://esi.evetech.net/latest/search/?categories=&search=你的人物名&strict=true,当您修改人物名的时候,链接将自动完成转换。

注意将strict选择为True!

不然就是这个效果:
图7

像我的名字比较特殊,返回的结果只有3个(哈哈都是我的)。如果您的名字比较大众化,可能会返回更多的结果,这个时候就不知道哪个id是您的了。极端的, 您可以尝试输入名字为 chen,看看会返回多少个结果。

2.2.2 输入多个参数

大多数情况下,ESI查询需要输入2个参数(人物数字id和Token),因为这些数据比较私密比如查询市场数据,钱包等等。ESI除了要知道要查询的是哪个人(数字id),还需要验证这个人物是您所有(Token)。比如在Function->GetTwoPara下的函数“GetSellData”。调用的时候您会看到要求输入两个参数,ID以及token。好了,上面的内容已经告诉我们了ID是从ESI获取,而Token是从Postman获取的,因此这连个参数需要调用两个函数,一个是“GetCharacterID”,另外一个是“GetRefreshToken”。

进入高级编辑器看看代码:

query
1
2
3
4
5
6
7
8
9
(ID, token)=>

let
IDtext= Number.ToText(ID),
源 = Json.Document(Web.Contents("https://esi.evetech.net/latest/characters/"&IDtext&"/orders/?token="&(token)&"")),
转换为表 = Table.FromList(源, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"展开的“Column1”" = Table.ExpandRecordColumn(转换为表, "Column1", {"duration", "is_corporation", "issued", "location_id", "order_id", "price", "range", "region_id", "type_id", "volume_remain", "volume_total"}, {"Column1.duration", "Column1.is_corporation", "Column1.issued", "Column1.location_id", "Column1.order_id", "Column1.price", "Column1.range", "Column1.region_id", "Column1.type_id", "Column1.volume_remain", "Column1.volume_total"})
in
#"展开的“Column1”"

代码我们主要看前几行,“转换为表”及以后的是表格数据的后处理过程,您可以删除掉自己定义表格的处理方法。

  • 双参数的写法“(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()函数。

我们来看看源的表现形式。这个是原始数据,您可以在这个窗口删减行列得到您最终的数据表格。
图8

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的获取过程。

  1. 将鼠标左击输入的人名以选择Char_info表格,然后点击数据->自表格区域,如下图。
    图9
  2. 在PQ编辑器中,选择添加列标签,点击调用自定义函数,出现选项如下图。新列名我取的ID,按图所示选好以后确定。
    图10
  3. 点击这个小箭头,并扩展到新行。
    图11
  4. 同理,点击调用自定义函数,功能查询选择GetRefreshToken,列取名token,refresh_token选择postman token。一路确认后,得到Token值
    图12
  5. 继续点击调用自定义函数,功能查询选择GetWalletBalance,token要改成列名后才能够在右边下拉框中选取。注意这里的token选项应为token,不要选成postman token
    图13
  6. 确定后可以得到,你可以删除多余的列,比如ID,Token等信息,只留下最后一列。文件->关闭并上载至,或者直接关闭并上载到一个新的表格即可。
    图14
  7. Excel会自动生成一个页,重命名即可。
    图15
  8. 如果你有多个人物,可以一次输入多行,然后一起处理。如下图
    图16

至此,EVEonline ESI用EXCEL获取数据的教程基本完整,如有反馈可在github下提交issues反馈问题。

您可能感兴趣的内容:

1. 5级任务指引

2. 自建游戏加速器

返回主页