odoo/ext/3rd-party-addons/mobikul/models/fcmAPI.py

94 lines
3.4 KiB
Python
Executable File

import requests
import json
FCM_URL = "https://fcm.googleapis.com/fcm/send"
class FCMAPI(object):
def __init__(self, api_key):
self._API_KEY = api_key
def _headers(self):
return {
"Content-Type": "application/json",
"Authorization": "Key=" + self._API_KEY
}
def jsonDumps(self, data):
return json.dumps(data).encode('utf8')
def _push(self, payload):
response = requests.post(FCM_URL, headers=self._headers(), data=payload)
print (response)
if response.status_code == 200:
if int(response.headers.get('content-length',0)) <= 0:
return {}
return response.json()
elif response.status_code == 401:
raise Exception("There was an error authenticating the sender account")
elif response.status_code == 400:
raise Exception(response.text)
else:
raise Exception("FCM server is temporarily unavailable")
def send(self, payloads=None):
self.all_responses = []
for payload in payloads:
response = self._push(payload)
self.all_responses.append(response)
return self.all_responses
def parse_payload(self, registration_ids=None, topic_name=None, message_body=None, message_title=None,
message_icon=None, priority=False, data_message=None, badge=None, color=None, tag=None,
**extra_kwargs):
fcm_payload = dict()
if registration_ids:
if len(registration_ids) > 1:
fcm_payload['registration_ids'] = registration_ids
else:
fcm_payload['to'] = registration_ids[0]
if topic_name:
fcm_payload['to'] = '/topics/%s' % topic_name
if priority:
fcm_payload['priority'] = 'normal'
else:
fcm_payload['priority'] = 'high'
if data_message:
if isinstance(data_message, dict):
fcm_payload['data'] = data_message
else:
raise Exception("Provided data_message is in the wrong format")
fcm_payload['notification'] = {}
if message_icon:
fcm_payload['notification']['icon'] = message_icon
if message_body:
fcm_payload['notification']['body'] = message_body
if message_title:
fcm_payload['notification']['title'] = message_title
if badge:
fcm_payload['notification']['badge'] = badge
if color:
fcm_payload['notification']['color'] = color
if tag:
fcm_payload['notification']['tag'] = tag
if extra_kwargs:
fcm_payload['notification'].update(extra_kwargs)
return self.jsonDumps(fcm_payload)
if __name__== "__main__":
key = "AAAAkdP3f44:APA91bEyls0NapnpJi9IZvMe7jEpkYYx99bdCcFUYtIy4ZDEsEaKaZd1DRhodK6yIXiiWvRfwCE_17HU2uz04s--1qYSw635BgB_ilMxwlQEbBPOqoJkFTPpWnERbbJ2401Eyh27Szyv"
push_service = FCMAPI(api_key=key)
registration_id = ["eSUQAef0S2Y:APA91bHm_Q2YJnzBJI77g7mTAW1teFd3i0t8gOM8HqJuv2RgO3_FFSI03ffShGCXus6jNNyILZ3Xng2jNKQdMCJ5FBPneJifkhQ9RJsC52reHfoXOxeEQvLFRbXZw1mKccUIGjf7P7_l"]
message_title = "Test"
message_body = "Hi Mohit, your customized news for today is ready"
payload = push_service.parse_payload(registration_ids=registration_id, message_title=message_title, message_body=message_body)
print (payload)
print (push_service.send([payload]))