{"id":14068305,"url":"https://github.com/eddelbuettel/rpushbullet","last_synced_at":"2025-09-23T10:35:16.488Z","repository":{"id":17365216,"uuid":"20136981","full_name":"eddelbuettel/rpushbullet","owner":"eddelbuettel","description":"R interface to the awesome Pushbullet service","archived":false,"fork":false,"pushed_at":"2024-12-12T03:03:11.000Z","size":718,"stargazers_count":94,"open_issues_count":2,"forks_count":19,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-03-29T17:11:08.578Z","etag":null,"topics":["json","messaging","pushbullet","r"],"latest_commit_sha":null,"homepage":"https://eddelbuettel.github.io/rpushbullet","language":"R","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eddelbuettel.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2014-05-24T18:48:46.000Z","updated_at":"2024-12-12T03:03:15.000Z","dependencies_parsed_at":"2024-08-13T07:14:01.036Z","dependency_job_id":"4a3b13b0-74b9-4215-b643-1147a684d9a1","html_url":"https://github.com/eddelbuettel/rpushbullet","commit_stats":{"total_commits":209,"total_committers":11,"mean_commits":19.0,"dds":0.215311004784689,"last_synced_commit":"6ba3676ce7284b00839ce9bff388e1b775321ad9"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eddelbuettel%2Frpushbullet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eddelbuettel%2Frpushbullet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eddelbuettel%2Frpushbullet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eddelbuettel%2Frpushbullet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eddelbuettel","download_url":"https://codeload.github.com/eddelbuettel/rpushbullet/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247378149,"owners_count":20929297,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["json","messaging","pushbullet","r"],"created_at":"2024-08-13T07:06:05.268Z","updated_at":"2025-09-23T10:35:11.403Z","avatar_url":"https://github.com/eddelbuettel.png","language":"R","funding_links":[],"categories":["R"],"sub_categories":[],"readme":"## RPushbullet: R interface to Pushbullet\n\n[![CI](https://github.com/eddelbuettel/rpushbullet/workflows/ci/badge.svg)](https://github.com/eddelbuettel/rpushbullet/actions?query=workflow%3Aci)\n[![License](https://img.shields.io/badge/license-GPL%20%28%3E=%202%29-brightgreen.svg?style=flat)](https://www.gnu.org/licenses/gpl-2.0.html)\n[![CRAN](https://www.r-pkg.org/badges/version/RPushbullet)](https://cran.r-project.org/package=RPushbullet)\n[![Dependencies](https://tinyverse.netlify.app/badge/RPushbullet)](https://cran.r-project.org/package=RPushbullet)\n[![Downloads](https://cranlogs.r-pkg.org/badges/RPushbullet?color=brightgreen)](https://www.r-pkg.org/pkg/RPushbullet)\n[![Code Coverage](https://codecov.io/gh/eddelbuettel/rpushbullet/graph/badge.svg)](https://codecov.io/gh/eddelbuettel/rpushbullet)\n[![Last Commit](https://img.shields.io/github/last-commit/eddelbuettel/rpushbullet)](https://github.com/eddelbuettel/rpushbullet)\n[![Documentation](https://img.shields.io/badge/documentation-is_here-blue)](https://eddelbuettel.github.io/rpushbullet/)\n\n### What is this?\n\nRPushbullet is an R client for the wonderful\n[Pushbullet](https://www.pushbullet.com) messaging / notification system.\n\n### So what is Pushbullet?\n\n[Pushbullet](https://www.pushbullet.com) is an awesome (and free) little\nservice that acts as a message broker. You sign up, and get a key to use the\nAPI.  You then install the \"app\" on your smartphone or Chrome browser (and\nobtain a device id for of these). You can also query your account with the\n`pbDevices()` function to retrieve these ids.\n\nPresto. Now you can send messages between them by invoking `pbPost()`.\n\n### Example \n\nWith a resource file (see below) properly setup, you can just do something like the following\n\n```r\nR\u003e msg   # just an example, can be driven by real simulation results  \n[1] \"DONE after 10000 simulations taking 42.43 minutes reducing RMSE by  7.89 percent\"  \nR\u003e  \nR\u003e RPushbullet::pbPost(\"note\", title=\"Simulation complete\", body=msg)  \n```\n\nand a message like the image following below should pop up (if messaging directed to the browser):\n\n![](https://github.com/eddelbuettel/rpushbullet/raw/master/attic/rpushbullet_message.png)  \n\nAnother excellent use case was suggested years ago by [Karl Broman](https://kbroman.org/) in \n[this blog post](https://kbroman.wordpress.com/2014/09/04/error-notifications-from-r/). We can \nimprove on his version a little as one no longer needs to load the package:\n\n```r\noptions(error = function() { \n    RPushbullet::pbPost(\"note\", \"Error\", geterrmessage())\n    if(!interactive()) stop(geterrmessage())\n})\n```\n\nThere was one noteworthy follow-up for which I lost the source: it suggested to make the message \nsomewhat saltier by relying on the helpful [rfoaas](https://dirk.eddelbuettel.com/code/rfoaas.html) package.\n\n### Documentation\n\nPackage documentation, help pages, a vignette, and more is available\n[here](https://eddelbuettel.github.io/rpushbullet/).\n\n\n### Package Status\n\nThe package is reasonably mature and functional. \n\nUp until release 0.2.0, an external `curl` binary was used. We have since switched to using\nthe [curl](https://cran.r-project.org/package=curl) package.\n\nGiven that the [Pushbullet API](https://docs.pushbullet.com/) has other nice features, future \nextensions are certainly possible and encouraged.  Interested contributors should file issue \ntickets first to discuss before going off on pull requests.\n\n### Initialization\n\nA file `~/.rpushbullet.json` can be used to pass the API key and device\nidentifiers to the package.  The content is read upon package startup, and\nstored in a package-local environment. The format of this file is as follows:\n```\n{ \n    \"key\": \"...placey your api key here...\",\n\n    \"devices\": [ \n        \".....device 1 id......\",\n        \".....device 2 id......\",\n        \".....device 3 id......\"\n    ],\n\n    \"names\": [\n        \"...name1...\",\n        \"...name2...\",\n        \"...name3...\"\n    ],\n\n    \"defaultdevice\": \"...nameOfYourDefault...\"\n}\n```\n\nThe `names` and `defaultdevice` fields are optional. See the main package\nhelp page for more details.\n\nYou can also create the file programmatically via\n\n```r\ncat(jsonlite::toJSON(list(key=\"..key here..\", devices=c(\"..aa..\", \"..bb..\"))))\n```\n\nand write that content to the file `~/.rpushbullet.json`.\n\nStarting with release 0.3.0, a new helper function `pbSetup()` is also\navailable to create the file.\n\nYou can also retrieve the ids of your devices with the `pbGetDevices()`\nfunction by calling, say, `str(fromJSON(pbGetDevices()))`.  Note that you\nneed to load one of the packages `RJSONIO` or `rjson` or `jsonlite` to access\nthe `fromJSON()` function.\n\n### Channels\n\nPushbullet has recently added [channels](https://www.pushbullet.com/channels)\nto their API. These are notification feeds that user can subscribe to, and\nwhich allows the developer to create (per-topic) channels for various\napplications / topics that her users can subscribe to.\n\nCreating a channel is easy: one simply needs to login and visit the\n[My Channel](https://www.pushbullet.com/my-channel) page. From there, one\ncan easily create a new channel by clicking the \"add channel\" button. There\nwill be a prompt to enter a 'tag', a channel name, as well as a\ndescription. The `channel_tag` is what is needed to push posts to the\nchannel. Currently, only the owner of a channel has permissions to post to\nthat channel, so one will need to create the channel using the same login one\nhas specified in `~/.rpushbullet.json` in order to use RPushbullet to post to\na channel.\n\n_Channels are public_: Anyone who knows the channel 'tag' can subscribe and\nwill therefore receive all messages pushed to that channel. Some users create\nhard-to-guess channel tags to achieve semi privacy. This works because it is,\ncurrently as of February 2015, neither possible to list the channels owned by\na specific user nor possible to browse or search for other users' channels.\nOne method to generate a hard-to-guess tag is `digest::digest(rnorm(1))`.\n\nChannels can be used by passing a `channel` argument to the `pbPost`\nfunction. The Pushbullet API identifies a channel via the\nsupplied `channel_tag` value of this argument. See the\n[Pushes API documentation](https://docs.pushbullet.com/) for more\ninformation.\n\n### Author\n\nDirk Eddelbuettel with contributions by Bill Evans, Mike Birdgeneau, Henrik\nBengtsson, Seth Wenchel, Colin Gillespie and Chan-Yub Park.\n\n### License\n\nGPL (\u003e= 2)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feddelbuettel%2Frpushbullet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feddelbuettel%2Frpushbullet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feddelbuettel%2Frpushbullet/lists"}