创建JSON文件以使用RPushbullet包

时间:2014-11-10 05:02:15

标签: json r package

我最近发现了RPushbullet软件包,并且尝试将其设置为使用时未成功。 The author's blog提供了安装包的分步指南;但是,我遇到了一些问题。以下是前两个步骤:

  1. 获取应用程序(谷歌浏览器或移动设备)
  2. Create a Pushbullet account
  3. 下一步是在主目录中的JSON文件.rpushbullet.json中插入一些信息。我之前从未使用过JSON文件,因此我阅读了一些关于该格式的文章。无论如何,要放入JSON文件的信息是:

    • 帐户设置页面中的API密钥
    • 设备的ID

    第三步的原因是当加载RPushbullet包时,它会尝试读取JSON文件以获取其中的信息。

    我在notepad++的帮助下创建了一个文件,并将其命名为.rpushbullet.json(这是包所需的名称),使其成为JSON文件(Windows将其标识为一个)。但是(这是第一个问题),当我加载包时,由于某种原因找不到该文件。以下是错误消息:

    > library(RPushbullet)
    Attaching RPushbullet version 0.1.1.
    No file ~/.rpushbullet.json found.
    Consider placing the Pushbullet API key and your device id(s) there.
    

    库没有“看到”我创建的JSON文件。错误消息表明我将API密钥和设备ID添加到文件中。作者实际上提供了一个代码,用于生成json代码以复制和粘贴到文件中:

    > library(RJSONIO)
    > cat(toJSON(list(key="..your key here..", devices=c("..device a..", "..device b.."))))
    {
     "key": "..your key here..",
    "devices": [ "..device a..", "..device b.." ] 
    }
    

    如上所述,API密钥很容易获取,因为它位于帐户设置页面中。另一方面,我无法从Pushbullet网站获取设备ID。经过一些研究,我了解到可以使用R包从jsonlite内获取设备ID。这是代码和随后出现的错误消息:

    > fromJSON(pbGetDevices())$devices[,c("iden", "nickname")]
    Error in fromJSON(pbGetDevices()) : 
      error in evaluating the argument 'content' in selecting a method for function 'fromJSON': Error: Neither option 'rpushbullet.key' nor entry in package environment found. Aborting
    

    显然,我在主目录中创建的JSON文件不会被任何包“看到”。

    我需要你的帮助。

3 个答案:

答案 0 :(得分:2)

首先,如果它说找不到.rpushbullet.json文件,你在哪里保存它?它应该在Sys.getenv("HOME")返回的任何目录中(例如,/home/username/Users/username,...)

当我正在玩它时,似乎API返回的内容已经发生了变化,因为RJSONIO::fromJSON()不再对它进行解释。 (这可能是一个错误?)我发现有几种方法可以正确地减少回报。我会模仿pbGetDevices()并提及我分歧的地方:

apikey <- "a1...98"                ## replace with the string of your API key
txt <- sprintf("%s -s %s -u %s:", RPushbullet:::.getCurl(),
               "https://api.pushbullet.com/v2/devices", apikey)
jsonres <- system(txt, intern = TRUE)
## res <- fromJSON(jsonres)        ## this doesn't work anymore
res <- Reduce(rbind, RJSONIO::fromJSON(jsonres)$devices)[,c('iden','nickname')]

变量res现在有一个data.frame,其中包含两列,您需要的设备ID,以及昵称显示(当您将它们保存到.rpushbullet.json文件中)时。< / p>

(哦,确保notepad ++没有秘密地在文件名中添加.txt。这是一个常见的窗口事项,有助于保护您免受暴露于文件的不便之处扩展。)

答案 1 :(得分:1)

请允许我引用该软件包的文档(并回应@ r2evans写的内容):

  

一种可能性是在文件中使用文件\ code {.rpushbullet.json}   \ code {$ HOME}目录。 (请注意,在Windows上,您可能需要设置   \ code {$ HOME}环境变量。)

如果您想要文件的便利性,请将其放入$HOME。在没有它的操作系统上创建$HOME

您不必被迫使用该文件。您也可以使用任何R启动文件来填充options()

答案 2 :(得分:1)

我也遇到了这个。对我来说,这是通过将RPushbullet文件添加到我的HOME目录来安装和加载.rpushbullet.json的结果,随后。那时,该软件包尚未识别出新的.rpushbullet.json文件。

现在只需拆下然后重新加载包装,即可识别它:

install.packages("RPushbullet")
library(RPushbullet)
pbSetup()
detach("package:RPushbullet", unload=TRUE)
library(RPushbullet)
pbPost("note", title="Works perfectly now!")