Skip to content

Instantly share code, notes, and snippets.

@PatelUtkarsh
Last active January 14, 2020 06:01
Show Gist options
  • Save PatelUtkarsh/56500891d659a1cdefbfa2c42721e377 to your computer and use it in GitHub Desktop.
Save PatelUtkarsh/56500891d659a1cdefbfa2c42721e377 to your computer and use it in GitHub Desktop.
Send pushbullet msg on website hit.
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
/**
* Respond to the request
* @param {Request} request
*/
async function handleRequest(request) {
const url = new URL(request.url)
const msg = url.searchParams.get('msg');
const title = url.searchParams.get('title');
const token = 'REPLACE_ME';
if (!msg || !title) {
return new Response('Oops!', { status: 404 });
}
const payload = {
'body': msg,
'title': title,
'type': 'note',
};
const init = {
method: 'POST',
headers: {
'Access-Token': token,
'Content-Type': 'application/json',
},
body: JSON.stringify(payload),
};
response = await fetch('https://api.pushbullet.com/v2/pushes', init)
console.log(JSON.stringify(response));
if (response.ok) {
return new Response('Okay!', { status: 200 });
}
return new Response('Oops!', { status: 400 });
}
<?php
/**
* Send pushbullet msg on website hit.
* Author: Utkarsh Patel (github.com/patelutkarsh)
*
* Usage: push.example.com?msg=webpush&title=Awesome&secret=SecretForAuthReplaceME
*/
// If unauthorized user kick him.
if ( ! isset( $_GET['secret'] ) || 'SecretForAuthReplaceME' !== $_GET['secret'] ) {
http_response_code( 401 );
exit;
}
// Get token from pushbullet: https://www.pushbullet.com/#settings/account
$token = '';
$ch = curl_init();
$default = array(
'body' => '',
'title' => '',
'type' => 'note',
);
$keys = array(
'msg',
'title',
'type',
);
$data = array();
foreach ( $keys as $key ) {
$value = filter_input( INPUT_GET, $key, FILTER_SANITIZE_STRING );
if ( ! empty( $value ) ) {
$data[ $key ] = $value;
}
}
if ( ! array_filter( $data ) ) {
http_response_code( 404 );
exit;
}
// Change msg to body. See https://docs.pushbullet.com/#create-push
if ( ! empty( $data['msg'] ) ) {
$data['body'] = $data['msg'];
unset( $data['msg'] );
}
$data = array_merge( $default, $data );
curl_setopt( $ch, CURLOPT_URL, 'https://api.pushbullet.com/v2/pushes' );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $data ) );
curl_setopt( $ch, CURLOPT_POST, 1 );
$headers = array();
$headers[] = "Access-Token: $token";
$headers[] = 'Content-Type: application/json';
curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );
$result = curl_exec( $ch );
if ( curl_errno( $ch ) ) {
echo 'Error:' . curl_error( $ch );
http_response_code( 500 );
} else {
echo 'Done';
http_response_code( 200 );
}
curl_close( $ch );
exit;
@PatelUtkarsh
Copy link
Author

PatelUtkarsh commented Apr 5, 2017

Usage:

When you're on tmux/screen or local terminal with a long process and waiting for process/command to finish.

my_long_command; wget -q "http://push.mysite.com?msg=my_long_command finished&title=Awesome&secret=SecretForAuthReplaceME" > /dev/null

This will send you push notification on mobile/computer.

Note: this uses pushbullet.com for sending a notification.

function notify(){
    wget -qO- "http://push.mysite.com?msg=$1&title=Awesome&secret=SecretForAuthReplaceME" &> /dev/null
}

Add this to your .zshrc or .bashrc profile for handy use.

This script requires php and webserver which makes usable by all linux server. You can optionally use the same script with bit modification for command line php.

@jinalskothari
Copy link

Nice! 😉

@PatelUtkarsh
Copy link
Author

Updated usage.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment