Giter VIP home page Giter VIP logo

py-pushover-open-client's Introduction

Python Pushover Open Client

py-pushover-open-client aims to provide unofficial Python bindings for Pushover's Open Client API.

Usage

Setup

pip3 install py-pushover-open-client 

Or simply clone this repository, change into it's root directory and run "pip3 install ."

How to Use

You can now import the main client using:

from pushover_open_client import Client

Please see the examples provided for more detail.

Device Registration

The first step is to register a new desktop device with the Pushover servers. This gives us certain device properties, specifically a secret, user key and device key, which can be saved and used by our client to recieve messages.

To do this, you must setup a configuration file in JSON format containing your Pushover's email and password as below:

{
	"email": "[email protected]",
	"password": "myPushoverPassword",
	"secret": "",
	"deviceID": "",
	"userID": ""
}

Then run code that looks like below. Replace "deviceName" with a device name between 0 and 25 characters long, "yourInConfig.cfg" with the name of your input configuration file, and "yourOutConfig.cfg" with the name intended for your output configuration file.
Note: These can be the same name if you wish.

from pushover_open_client import Client

client = Client("yourInConfig.cfg")
client.login()
client.registerDevice("deviceName")
client.writeConfig("yourOutConfig.cfg")

Assuming the deviceName has not already been taken, your new device will be registered!

Note: If you receive an error message saying you could not register the device, try changing the name to be a unique name.

Receiving Messages

Once you have completed registration of the device, you want to continue to use the output configuration file which was written during registration. This will contain the information needed to log in to the servers and to receive messages.

When you initially start a client, you will want to flush out any previously recorded messages. This is also a good way to test that your registration has been successful, as you will receive at least one test message from Pushover.

To do this, start a new session using the written configuration and get any outstanding messages as below:

client = Client("yourOutConfig.cfg")
messageList = client.getOustandingMessages()

#Process/do work with messageList
if(messageList):
	for m in messageList:
		print m.message

	client.deleteMessages(messageList[-1].id)

After you have flushed out any previous messages, you can connect to the websocket to receive real time messages! This can be done in one of two methods - via polling, or via passing in a callback function (recommended). Here are examples of both:

Polling:
while(True):
	messageList = client.getWebSocketMessages()

	#Prcoess/do work with messageList!
	if(messageList):
		for message in messageList:
		
			#Do work with message here!

			#Make sure to acknowledge messages with priority >= 2
			if(message.priority >= 2):
				client.acknowledgeEmergency(message.receipt)			
			
		#Make sure you delete messages that you recieve!
		client.deleteMessages(messageList[-1].id)
	
	sleep(5) #Wait a few seconds between requests
Callback:
def messageCallback(messageList):
	#Prcoess/do work with messageList!
	if(messageList):
		for message in messageList:
		
			#Do work with message here!
		
			#Make sure to acknowledge messages with priority >= 2
			if(message.priority >= 2):
				client.acknowledgeEmergency(message.receipt)			
			
		#Make sure you delete messages that you recieve!
		client.deleteMessages(messageList[-1].id)

client.getWebSocketMessages(messageCallback)	

And that's it! Please remember to be responsible when accessing Pushover's API!

Message Object

Please see the open client documentation for information regarding what each message contains. Conditional elements are set to None if they do not exist to prevent exceptions.

All Messages Include:
id, umid, title, message, app, aid, icon, date, priority

Some Messages Conditionally Include: 
sound, url, url_title, acked, receipt, html

Acknowledgments

Thanks to the developers of:

  • websocket-client
  • requests

This client is not written or supported by Superblock, the creators of Pushover.

py-pushover-open-client's People

Contributors

jonogreenz avatar voltagex avatar kgilles avatar mrusme avatar

Stargazers

 avatar  avatar  avatar Vicente Romero avatar Johannes Lackner avatar  avatar Tim Porritt avatar

Watchers

James Cloos avatar  avatar  avatar  avatar

py-pushover-open-client's Issues

KeyError raised when a message doesn't have a title.

In the init function, you have the following:

self.title = messageJson["title"]

If a message doesn't have a title, this generates a KeyError exception

I've fixed it in my copy by changing this line to say:

self.title = messageJson["title"] if "title" in messageJson else None

Naming of repository

Hi I am developing using this library, so thanks for that, its working really well.

I am using using your repository as a submodule using the syntax:

from py-pushover-open-client.pushover_open_client import Client
However python complains at it has the - symbol in, so I am having to rename the folder locally to
from py_pushover_open_client.pushover_open_client import Client

My repository is here if you wanted to take a look to see what I mean.
IFTTTtoDomoticzUsingPushover

I know there are other ways around this such as taking the python file (with copyright/license/credit, etc) and putting it in my own repository, however I prefer to link to your repository, so it gives you the credit and also if you make updates (such as the empty title issue, which, I also hit).

Any other suggestions welcome.

Thanks Joe

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.