嗨,老兄们!
尽管神奇宝贝的炒作正在逐渐消失,但我想向您展示如何用R编程地搜索稀有的神奇宝贝。最终脚本将能够获取坐标或地址,并在给定的半径内查找神奇宝贝。让’s start.
步骤1:通过curl发送查询
要以编程方式进行神奇宝贝搜索,我们首先需要一个允许我们执行此操作的API。在网上研究期间,我找到了该网页 fastpokemap.se 您可以点击地图,并在几秒钟内显示所有半径约40m的神奇宝贝。整洁的是,它们还有一个API,使您可以通过使用curl来以编程方式执行此操作。您可以在下面阅读有关此主题的更多信息 reddit 。这也是我从以下位置获取curl查询的地方:
curl '//api.fastpokemap.se/?key=allow-all&ts=0&lat=51.5301638&lng=-0.08174179999999999' -H 'Accept: application/json, text/javascript, */*; q=0.01' -H 'Origin: //fastpokemap.se' -H 'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36' --compressed
因此,此查询执行的操作是获取一个坐标(纬度,经度),并返回大约40m半径内的所有神奇宝贝。最终结果是一个类似JSON的JSON(当您将其插入控制台时,根据时间可能会得到不同的结果):
{"result":[{"spawn_point_id":"48761cbc80b","encounter_id":"8774076881359073581"," 宠物小精灵 _id":"RATTATA","latitude":51.531039698408804,"longitude":-0.07933453745476703,"expiration_timestamp_ms":"1474705165772"},{"spawn_point_id":"48761cbb0db","encounter_id":"5024433270417738285"," 宠物小精灵 _id":"PIDGEY","latitude":51.52923201185921,"longitude":-0.07988043570107511,"expiration_timestamp_ms":"1474704786572"}
您可以看到检测到的神奇宝贝的坐标,它们的名称(RATTATA和PIDGEY)以及其他几个参数。
步骤2:在R中包装
查询坐标
R允许您从脚本内执行这些查询。您可以通过多种方式执行此操作,我更喜欢使用以下实现 系统()。 使用此功能,您可以像这样调用OS命令:
#Define Coordinates x = 51.53054691352413 y = -0.08174179999999999 #Send query and store result in variable res res = system(paste0("curl '//api.fastpokemap.se/?key=allow-all&ts=0&lat=",x,"&lng=",y,"' -H 'Accept: application/json, text/javascript, */*; q=0.01' -H 'Origin: //fastpokemap.se' -H 'User-Agent: Mozilla/5.0' --compressed"), 实习生= T )
在上面的代码中,我已经定义了两个变量,在这些变量中存储了坐标,然后将其插入到由您调用的查询语句中 系统()。 通过设置参数 实习生= T 查询的结果存储在用户定义的R变量中。这是结果在R中的样子:
[1] "{\"result\":[{\"spawn_point_id\":\"48761cbc919\",\"encounter_id\":\"17122260820454702845\",\" 宠物小精灵 _id\":\"RATTATA\",\"latitude\":51.53169635521043,\"longitude\":-0.0801630351728887,\"expiration_timestamp_ms\":\"1474705518404\"},{\"spawn_point_id\":\"48761cbc9bb\",\"encounter_id\":\"13826549414915815469\",\" 宠物小精灵 _id\":\"RATTATA\",\"latitude\":51.53120337908847,\"longitude\":-0.08025346621673418,\"expiration_timestamp_ms\":\"1474705359884\"}]}"
按地名查询(地理编码)
在大多数情况下,您不’不知道一个地方的确切坐标。这就是为什么我将向您展示如何将上面的查询与地名一起使用。为此,我们将使用软件包{dismo}:
该软件包使用地理编码从给定地址获取坐标。例如:
#load library library(dismo) #get coordintes of the street 'Lincoln Ave in Ames Iowa' coords = geocode("Lincoln Ave, Ames Iowa)
结果是这样的:
> coords originalPlace interpretedPlace longitude latitude xmin xmax ymin ymax uncertainty 1 Lincoln Ave, Ames Iowa Lincoln Way, Ames, IA, USA -93.65478 42.02272 -93.70192 -93.6084 42.01998 42.02479 3849
通过使用coords $ longitude和coords $ latitude,您可以从该位置提取相应的坐标,然后从上方将其插入我们的查询中:
x = coords$longitude y = coords$latitude res = system(paste0("curl '//api.fastpokemap.se/?key=allow-all&ts=0&lat=",x,"&lng=",y,"' -H 'Accept: application/json, text/javascript, */*; q=0.01' -H 'Origin: //fastpokemap.se' -H 'User-Agent: Mozilla/5.0' --compressed"), 实习生= T )
但是,在这种情况下,我得到的结果是空的。查询时显然在此位置没有神奇宝贝:
"{\"result\":[]}"
将其带入新的高度
那么还有什么可能呢?我们可以将单个查询循环成一个循环,以在整个城市或附近自动搜索。其他可能性包括通知脚本,该脚本可以在检测到神奇宝贝时向您发送电子邮件。或者,如果您真的想推动它,请一遍又一遍地扫描您的城市,以检测产卵模式和巢穴。可能性是无止境!
如果您喜欢这个简短的教程,我将很高兴为您展示更多。请在下面给我留言。
干杯马丁(勇气队)
发表回复