richard-better / pushbullet.py Goto Github PK
View Code? Open in Web Editor NEWA python client for http://pushbullet.com
License: MIT License
A python client for http://pushbullet.com
License: MIT License
in setup.py
from pip.req import parse_requirements
...
...
install_reqs = parse_requirements("requirements.txt", session=uuid.uuid1())
Not include 'session'.
parse_requirements is include ['filename', 'finder', 'comes_from', 'options']
Hi,
I am using this lib to push few notes to devices. Unfortunately since last week it doesn't work. I am not getting any error messages. Could it be some problem with PushBullet Server? Do you face same problem? Please help.
January 28, 2015
โข Removed address and list pushes which have been deprecated for forever.
Can submit a PR to remove those functions unless there's a reason to keep them?
if my contact have unicode symbol i got error
Pushbullet API allows you to send directly to a specific channel by using the channel_tag
parameter.
How can this be achieved with pushbullet.py without having to search in the channel list?
Hi I wrote a short script to test the sms feature.
But it has kept on sending the same sms for last 1 hour.
`from pushbullet import PushBullet
pb=PushBullet('----')
print pb.devices
device=pb.devices[0]
push = pb.push_sms(device, "---", "Wowza!")`
The readme suggests that Pushbullet.get_pushes()
returns a list of pushes. This is not true, however. It actually returns a two-length tuple, in which the first element is True
and the second is the list of pushes.
Eg. the function currently returns:
>>>pb.get_pushes()
(True, [push0, push1, push2])
Instead of:
>>>pb.get_pushes()
[push0, push1, push2]
Simply updating the readme to reflect this (or changing the behavior of the function) would fix this. Some documentation of what the True
means would be nice, too.
A lot of python modules let you run a script version of the module using -m
as documented https://docs.python.org/2/using/cmdline.html#cmdoption-m
Would be nice to run pushbullet.py with the -m and specify the message to send.
The devices icon value is always None
devices = pb.devices
print(devices[0].icon)
will return a NoneType exception
I need to specify the source device when pushing notes. But I just found out there is no source_device
parameter for push_note
.
I had implemented it in my own project. I thought I can make a PR if needed.
Refer to : https://docs.pushbullet.com/#create-push
First off, thanks for making Pushbullet.py, it's awesome.
At Home Assistant we were depending on PushBullet.py 0.7.1 as we had no time yet to upgrade to the latest version. Somehow version 0.7.1 has gone missing from PyPi resulting in an error when people tried to install PushBullet support in Home Assistant.
I don't know if you had a role in removing the version from PyPi. But if you did, could you please be aware in the future that there are probably other projects depending on older versions of your code, thanks!
As mentionned on the API doc https://docs.pushbullet.com/#update-chat
I'm creating a Gtk+ application for Pushbullet and i would love to implement this as a feature :)
Thanks!
How do i go about importing this as a module for 3.4.2?
I guess this is a question more than an issue. I'd like to help out writing the tests but I'm still wrapping my head around writing tests in python to be honest.
Had a look at the test_auth.py
that's already included. From what I have been reading it would seem better if we mocked the call instead of actually called a login to Pushbullet. I wrote some code which I think does the trick but I guess the question is, is this the proper way to mock it out? I notice there's no test_pushbullet yet, so I can't quite see how you would do it properly.
import pytest
import mock
import pushbullet
@mock.patch('pushbullet.Pushbullet._get_data')
class TestAuth(object):
def test_auth_fail(self, mock__get_data):
mock__get_data.side_effect = pushbullet.errors.InvalidKeyError()
with pytest.raises(pushbullet.InvalidKeyError) as exinfo:
pb = pushbullet.Pushbullet("faultykey")
def test_auth_success(self, mock__get_data):
mock__get_data.return_value = { "name" : "Pushbullet Tester" }
pb = pushbullet.Pushbullet("validKey")
assert pb.user_info["name"] == "Pushbullet Tester"
If this IS the way to do it and the above is valid, I'd love to see what else I can knock up. Though as I say, literally just getting started in this area!
Cheers,
@RandomChars, @troeggla, @kovacsbalu
Currently we have no explicit policy regarding Python 2.6 so I think we should vote whether we want to support it or not. If the voting results in a positive answer then we need to add Python 2.6 to Travis and make sure we avoid using language features that aren't compatible with Python 2.6.
My personal opinion is against. Python 2.6 is a rather old version which lacks support of useful features such as dict/set comprehension and multiple context manager (without the use of the nested
function). AFAIK it's being used only on CentOS 6. CentOS 6 is also quite an old distribution, although it's considered to be supported until 2020. Personally, I don't think we should support everything that Redhat supports. I also do not support Python 2.6 in pushbullet-cli.
Please cast your vote.
I tried installing pushbullet API using following methods:
python setup.py install
D:\github\clone\pushbullet.py>python setup.py install
File "setup.py", line 26
packages=['pushbullet'],
^
SyntaxError: invalid syntax
D:\github\clone\pushbullet.py>
Error Log : http://hastebin.com/xepunejuje.tex
I am using python v2.7.3
I may very well be wrong, but this section of your README, dealing with sending SMS states This is untested and uses an undocumented API. Use with caution.
, but I see this section of the pushbullet's API documentation shows how to send SMS.
After reviewing your code in pushbullet/pushbullet.py
line 259-275:
def push_sms(self, device, number, message):
data = {
"type": "push",
"push": {
"type": "messaging_extension_reply",
"package_name": "com.pushbullet.android",
"source_user_iden": self.user_info['iden'],
"target_device_iden": device.device_iden,
"conversation_iden": number,
"message": message
}
}
r = self._session.post(self.EPHEMERALS_URL, data=json.dumps(data))
if r.status_code == requests.codes.ok:
return r.json()
raise PushError(r.text)
It seams as though you are following their documentation to the letter.
Perhaps simply an update to the README is in order, because as far as I can tell, you are correctly using their documented API.
_load_devices
, _load_contacts
and _load_user_info
all fail gracefully if the API key is wrong. It would be great if something would blow up so I can notify my users.
I get following error when trying to push a file:
Traceback (most recent call last):
File "send.py", line 21, in <module>
push = phone.push_(apk)
AttributeError: Device instance has no attribute 'push_'
Here is my script:
from pushbullet import PushBullet
api_key = "key"
pb = PushBullet(api_key)
from pushbullet import Device
phone = Device(api_key, id)
with open("my_cool_app.apk", "rb") as apk:
push = phone.push_(apk)
First i got following error, so i added a "r" before the "b":
Traceback (most recent call last):
File "send.py", line 20, in <module>
with open("my_cool_app.apk", "b") as apk:
ValueError: mode string must begin with one of 'r', 'w', 'a' or 'U', not 'b'
I have a sample file called "my_cool_app.apk" in the same folder as the script.
Thanks in advance
Most of our tests use mocks instead of contacting the real Pushbullet. As I said in #63, I don't think that it's such a good idea because our tests will pass even if Pushbullet change the API. As stated in #57, the "contacts" API has been obsolete for a while and our tests didn't detect that breakage.
Found this during some unit testing I was practicing. Reading up about this, it appears the pythonic way is to allow this and leave it up to the user to correctly use the function with specified argument. However, at the moment it will cause failure further down the line as the [IndexError("tuple index out of range") raised in repr()]
when it comes to try and print the device using the __repr__
function.
I am not sure of the best or most welcome method to resolve this, so haven't submitted a pull request. I guess it's either making the nickname mandatory (not None) or adjusting the __repr__
function to print nickname, manufacturer + model or a default?
I'm using pushbullet for the first time and having some trouble. I've installed pushbullet.py but when I do from pushbullet import Pushbullet
I get ImportError: No module named pushbullet
error.
[kamos@Boxee-Ubuntu-1604]:(4.9kb)~$ python
Python 2.7.11+ (default, Apr 17 2016, 14:00:29)
[GCC 5.3.1 20160413] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from pushbullet import Pushbullet
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named pushbullet
[kamos@Boxee-Ubuntu-1604]:(4.9kb)~$ ls -l /usr/local/lib/python3.5/dist-packages
total 120
drwxr-sr-x 7 root staff 4096 Jul 20 10:59 acdcli
drwxr-sr-x 2 root staff 4096 Jul 20 10:59 acdcli-0.3.1.egg-info
drwxr-sr-x 3 root staff 4096 Jul 20 10:59 colorama
drwxr-sr-x 2 root staff 4096 Jul 20 10:59 colorama-0.3.7.dist-info
drwxr-sr-x 5 root staff 4096 Jul 20 10:59 dateutil
-rw-r--r-- 1 root staff 217 Jul 20 10:57 easy-install.pth
-rw-r--r-- 1 root staff 31017 Apr 5 02:19 fuse.py
drwxr-sr-x 2 root staff 4096 Jul 20 10:59 fusepy-2.0.4.egg-info
-rw-r--r-- 1 root staff 9127 Jun 6 00:52 magic.py
drwxr-sr-x 4 root staff 4096 Jul 20 10:57 pip-8.1.2-py3.5.egg
drwxr-sr-x 3 root staff 4096 Jul 26 14:23 pushbullet
drwxr-sr-x 2 root staff 4096 Jul 26 14:23 pushbullet.py-0.10.0.dist-info
drwxr-sr-x 2 root staff 4096 Jul 26 14:23 __pycache__
drwxr-sr-x 2 root staff 4096 Jul 20 10:59 python_dateutil-2.5.3.dist-info
drwxr-sr-x 2 root staff 4096 Jul 26 14:23 python_magic-0.4.12.egg-info
drwxr-sr-x 4 root staff 4096 Jul 20 10:59 requests
drwxr-sr-x 2 root staff 4096 Jul 20 10:59 requests-2.10.0.dist-info
drwxr-sr-x 10 root staff 4096 Jul 20 10:59 requests_toolbelt
drwxr-sr-x 2 root staff 4096 Jul 20 10:59 requests_toolbelt-0.6.2.dist-info
drwxr-sr-x 4 root staff 4096 Jul 26 14:23 websocket
drwxr-sr-x 2 root staff 4096 Jul 26 14:23 websocket_client-0.37.0.egg-info
using the latest code from the repo (will be testing with release 10)
while initialising the Pushbullet class with my api key decode crashes trying to decode the response from the device list
this is the traceback from the console
File "/Users/oranshuster/PyCharmProjects/naipi/naipi/runner.py", line 150, in main
pb = Pushbullet(API_KEY)
File "build/bdist.macosx-10.11-x86_64/egg/pushbullet/pushbullet.py", line 29, in init
File "build/bdist.macosx-10.11-x86_64/egg/pushbullet/pushbullet.py", line 298, in refresh
File "build/bdist.macosx-10.11-x86_64/egg/pushbullet/pushbullet.py", line 42, in _load_devices
File "build/bdist.macosx-10.11-x86_64/egg/pushbullet/pushbullet.py", line 37, in _get_data
File "/Library/Python/2.7/site-packages/requests/models.py", line 819, in json
return json.loads(self.text, **kwargs)
File "/Library/Python/2.7/site-packages/simplejson/init.py", line 516, in loads
return _default_decoder.decode(s)
File "/Library/Python/2.7/site-packages/simplejson/decoder.py", line 370, in decode
obj, end = self.raw_decode(s)
File "/Library/Python/2.7/site-packages/simplejson/decoder.py", line 400, in raw_decode
return self.scan_once(s, idx=_w(s, idx).end())
simplejson.scanner.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
WARNING: file already exists but should not: C:\Users\megido\AppData\Local\Temp
_MEI100162\Include\pyconfig.h
Traceback (most recent call last):
File "", line 13, in
File "D:\Development\Python\build\main\out00-PYZ.pyz\pushbulle
t", line 69, in getDevices
File "D:\Development\Python\build\main\out00-PYZ.pyz\pushbulle
t", line 42, in _request
File "D:\Development\Python\build\main\out00-PYZ.pyz\requests.
api", line 44, in request
File "D:\Development\Python\build\main\out00-PYZ.pyz\requests.
sessions", line 456, in request
File "D:\Development\Python\build\main\out00-PYZ.pyz\requests.
sessions", line 559, in send
File "D:\Development\Python\build\main\out00-PYZ.pyz\requests.
adapters", line 382, in send
requests.exceptions.SSLError: [Errno 185090050] _ssl.c:343: error:0B084002:x509
certificate routines:X509_load_cert_crl_file:system lib
The example on the Pypi page still contains the typo fixed in commit e290611. Just bit me.
Python-magic is only needed if your pushing files so it shouldn't be a hardcoded dependency. Also some platforms like Pythonista (iOS app for coding Python) and windows 64 bit don't have an easy of of getting and using Python-magic.
There is an argument in the function new_contact called name, but inside the function you are calling nickname instead of name so using the function causes an error of global variable not defined.
def new_contact(self, name, email): data = {"name": nickname, "email": email} r = self._session.post(self.CONTACTS_URL, data=json.dumps(data)) if r.status_code == requests.codes.ok: new_contact = Contact(self, r.json()) self.contacts.append(new_contact) return True, new_contact else: return False, None
I tried pushing a address with the example code in the readme file
address = " 25 E 85th St, 10028 New York, NY"
push = pb.push_address("home", address)
This results in this error:
pushbullet.errors.PushError: {"error":{"code":"invalid_param","type":"invalid_request","message":"The param 'type' has an invalid value.","param":"type","cat":"\u003e:3"},"error_code":"invalid_param"}
the send note does work! So I'm sure the settings are right.
Do you have plans to implement support for this https://blog.pushbullet.com/2015/08/11/end-to-end-encryption/ ?
So I've just set up a bot that does stuff 24/7, and it currently automates some things, and notifies me when it does via this wonderful library via the wonderful PushBullet. But, there's some things that I'm not sure I know what I want it to do until I see what it has.
Think of a tweet. Tweet from ASpecialTweeter comes in, and I always want to retweet that. But if a tweet comes in from ANotSoSpecialTweeter, I only want to retweet after I've seen the tweet. So, in a perfect World, what I'd love is what you get in the Firefox plugin, but also on mobile, from one of my own tweets.
Basically, if it's at all possible, I'd love to, via the Python library, do something like,
resp = pb.push_interactive_note('Hey seaders, ANotSoSpecialTweeter just tweeted "{}", whatcha wanna do about it?'.format(tweet.text),
'Retweet', 'Favourite', onDismiss='Dismiss')
if 'Retweet' == resp:
twitter.retweet(tweet.id)
....
In my head, the power this would give this side of things would be amazing.
I run more than a few services like this, and being able to have such an easy way to program different things on servers, then ask myself what I want to do, via PB would add an extra dimension of power again.
Hello,
Here is a short question : How i can get pushes from specific device ?
It'd be nice to update to master which has the libmagic fix,
Hi there.
We used this module for pushbullet integration in balloob/home-assistant
Works awesome, keep up the good work!
Noticed that the contact don't seem to work. Result always is an empty list []
(yes, valid contacts in account).
Perhaps im doing something wrong, if so i'd appreciate the feedback :)
from pushbullet import PushBullet
pb = PushBullet('yourkeygoeshere')
pb.contacts
PB integrated in HASS (how we use your module, and a little shameless plug ;) )
https://github.com/balloob/home-assistant/blob/dev/homeassistant/components/notify/pushbullet.py
my script can't access to internet directly. What should i do if i have a proxy ?
I'm using pip and would like to pin the version that is master right now. Could you add a tag for that version? Probably 0.4.2
my_channel = pb.channels[0]
Or retrieve a channel by its channel_tag. Note that an InvalidKeyError is raised if the channel_tag does not exist
my_channel = pb.get_channel('My Channel')
So pb.channels works fine, but pb.get_channel returns an error that pushbullet doesn't have that object. Any idea what might be wrong?
I use a motioneyeos distribution on a rPi and installed pushbullet.py using easy_install on it
When I try to import pushbullet.py from a custom script, I face the following exception
Traceback (most recent call last):
File "eventstart.py", line 7, in <module>
from pushbullet import Pushbullet
File "/usr/lib/python2.7/site-packages/pushbullet.py-0.10.0-py2.7.egg/pushbullet/__init__.py", line 2, in <module>
from .pushbullet import Pushbullet
File "/usr/lib/python2.7/site-packages/pushbullet.py-0.10.0-py2.7.egg/pushbullet/pushbullet.py", line 8, in <module>
from .filetype import get_file_type
File "/usr/lib/python2.7/site-packages/pushbullet.py-0.10.0-py2.7.egg/pushbullet/filetype.py", line 12, in <module>
import magic
File "build/bdist.linux-armv6l/egg/magic.py", line 150, in <module>
File "/usr/lib/python2.7/ctypes/util.py", line 242, in find_library
File "/usr/lib/python2.7/ctypes/util.py", line 235, in _findSoname_ldconfig
IOError: [Errno 10] No child processes
I don't know why magic import fails but it's a very small distribution based on BuildRoot and probably a component required by magic is missing.
I extended the except fallback to IOError to fix the issue:
In filetypes.py
try:
import magic
except (ImportError, IOError):
import mimetypes
get_file_type = _guess_file_type
It just checks it has a "cursor" field, but it seems to have this even when it's reached the last page of pushes. This eats through rate limit very very quickly.
I'll send a pull request with a patch within the next few days hopefully.
Trying to install with pip install pushbullet.py and get errors. I have python-magic and requests. Running on Raspberry pi (raspbian).
/usr/bin/pip run on Wed Mar 11 19:36:16 2015
Downloading/unpacking pushbullet.py
Getting page http://pypi.python.org/simple/pushbullet.py
URLs to search for versions for pushbullet.py:
* http://pypi.python.org/simple/pushbullet.py/
Getting page http://pypi.python.org/simple/pushbullet.py/
Analyzing links from page https://pypi.python.org/simple/pushbullet.py/
Skipping link https://pypi.python.org/packages/2.7/p/pushbullet.py/pushbullet.py-0.4.1-py2.py3-none-any.whl#md5=5fdbecf2195ce5009e762c2a91fa6be3 (from https://pypi.python.org/simple/pushbullet.py/); unknown archive format: .whl
Skipping link https://pypi.python.org/packages/3.4/p/pushbullet.py/pushbullet.py-0.7.0-py2.py3-none-any.whl#md5=c3a7496b32ff8af14af8b0db8b787606 (from https://pypi.python.org/simple/pushbullet.py/); unknown archive format: .whl
Skipping link https://pypi.python.org/packages/3.4/p/pushbullet.py/pushbullet.py-0.7.1-py2.py3-none-any.whl#md5=a2e4a6b2f64715c0bb264d951ecb1464 (from https://pypi.python.org/simple/pushbullet.py/); unknown archive format: .whl
Skipping link https://pypi.python.org/packages/3.4/p/pushbullet.py/pushbullet.py-0.8.0-py2.py3-none-any.whl#md5=34c2642c1b57139af44363709a56bc74 (from https://pypi.python.org/simple/pushbullet.py/); unknown archive format: .whl
Skipping link https://pypi.python.org/packages/3.4/p/pushbullet.py/pushbullet.py-0.8.1-py2.py3-none-any.whl#md5=8f25da4f267d3bc2ae38ec5b2fa37706 (from https://pypi.python.org/simple/pushbullet.py/); unknown archive format: .whl
Found link https://pypi.python.org/packages/source/p/pushbullet.py/pushbullet.py-0.5.0.tar.gz#md5=36c83ba5f7d5208bb86c00eba633f921 (from https://pypi.python.org/simple/pushbullet.py/), version: 0.5.0
Found link https://pypi.python.org/packages/source/p/pushbullet.py/pushbullet.py-0.7.0.tar.gz#md5=58f603d1c2fd13dec443b48130bac6bf (from https://pypi.python.org/simple/pushbullet.py/), version: 0.7.0
Found link https://pypi.python.org/packages/source/p/pushbullet.py/pushbullet.py-0.7.1.tar.gz#md5=fe1cf277f3a91fce5692a5cf923b32c5 (from https://pypi.python.org/simple/pushbullet.py/), version: 0.7.1
Found link https://pypi.python.org/packages/source/p/pushbullet.py/pushbullet.py-0.8.0.tar.gz#md5=09beddda880c336c2fd693bf147d5ca4 (from https://pypi.python.org/simple/pushbullet.py/), version: 0.8.0
Found link https://pypi.python.org/packages/source/p/pushbullet.py/pushbullet.py-0.8.1.tar.gz#md5=1e8eccd95062df199830d92a29c57bdf (from https://pypi.python.org/simple/pushbullet.py/), version: 0.8.1
Using version 0.8.1 (newest of versions: 0.8.1, 0.8.0, 0.7.1, 0.7.0, 0.5.0)
Downloading pushbullet.py-0.8.1.tar.gz
Downloading from URL https://pypi.python.org/packages/source/p/pushbullet.py/pushbullet.py-0.8.1.tar.gz#md5=1e8eccd95062df199830d92a29c57bdf (from https://pypi.python.org/simple/pushbullet.py/)
Running setup.py egg_info for package pushbullet.py
Traceback (most recent call last):
File "<string>", line 14, in <module>
File "/root/build/pushbullet.py/setup.py", line 15, in <module>
install_reqs = parse_requirements("requirements.txt", session=uuid.uuid1())
TypeError: parse_requirements() got an unexpected keyword argument 'session'
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 14, in <module>
File "/root/build/pushbullet.py/setup.py", line 15, in <module>
install_reqs = parse_requirements("requirements.txt", session=uuid.uuid1())
TypeError: parse_requirements() got an unexpected keyword argument 'session'
----------------------------------------
Command python setup.py egg_info failed with error code 1 in /root/build/pushbullet.py
Exception information:
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 104, in main
status = self.run(options, args)
File "/usr/lib/python2.7/dist-packages/pip/commands/install.py", line 245, in run
requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)
File "/usr/lib/python2.7/dist-packages/pip/req.py", line 1009, in prepare_files
req_to_install.run_egg_info()
File "/usr/lib/python2.7/dist-packages/pip/req.py", line 225, in run_egg_info
command_desc='python setup.py egg_info')
File "/usr/lib/python2.7/dist-packages/pip/__init__.py", line 256, in call_subprocess
% (command_desc, proc.returncode, cwd))
InstallationError: Command python setup.py egg_info failed with error code 1 in /root/build/pushbullet.py
Returning a success boolean in a tuple is a pattern mostly used by Go developers, not Python. I think that the library should raise exceptions on errors, and the exceptions should contain information about the failure. I don't mind writing the pull request by myself if the author is OK with this suggestion.
Whats about some kind of event-loop with the possibility to register functions to receive incoming pushes?
Hello,
I had a new problem using pushbullet.py : I want to get push continuously but i'm limited by query limits.
How can i get push everytime like in all pushbullet clients ?
Thanks
(sorry for bad english)
There are several pull requests and open issues which haven't been dealt with for a while. In order to keep this good library relevant, please appoint additional project collaborators.
This line and this one assume the device id is an int. However on my machine my device id's are longs. (Actual identifiers changed, but they are 16 digits long) See below:
pb = PushBullet(api_key)
>>> pb.devices
[Device('apikey1', 1111111111111111), Device('apikey2', 2222222222222222)
>>> pb[1111111111111111]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/path/to/pushbullet/pushbullet.py", line 48, in __getitem__
raise TypeError("device_id must be an integer")
TypeError: device_id must be an integer
>>> type(int(1111111111111111))
<type 'long'>
>>> import sys
>>> sys.maxint
2147483647
This is because the maxint on my system is smaller then the device_id. A simple fix might be:
if type(query) in (long, int):
# ...
if type(device_id) not in (long, int):
Is this implemented already, and if so what are the steps to add a single item to an existing list?
The following listener example does not work:
s = Listener(API_KEY,
device_id=DEVICE_ID,
on_link=pushed_link,
http_proxy_host=HTTP_PROXY_HOST,
http_proxy_port=HTTP_PROXY_PORT)
TypeError: init() got an unexpected keyword argument 'on_link'
Because:
(source code)
def __init__(self, account,
on_push=None,
http_proxy_host=None,
http_proxy_port=None):
I can retrieve my list of devices like so from the command line:
curl -u key : https://api.pushbullet.com/v2/devices
and I can see that I have two devices with "active":false settings before my active devices. It turns out that pushbullet.py does not seem able to list my devices but returns "tuple index out of range".
from pushbullet import PushBullet
pb = PushBullet(key)
print pb.devices
However, with the yapbl package (and basically the same syntax) this works flawlessly.
As mentioned on the API
https://docs.pushbullet.com/#subscription
Hi,
This is a really handy library - thank you.
One niggle - when I push an image file (at least to an iOS device) the title, as shown in the notification, is the long and very un-userfriendly url of the pushed image. It would be much better if the notification showed, e.g. "Hi - this is the image". It seems this is possible with the pushbullet API (the "veraalerts" plugin for the vera home automation system achieves it) but I can't figure out how to do it with this library. Am I missing something, or would it be possible for you to tweak the library to make this work?
many thanks,
Dan
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.