Pushbullet
Posted: Tue May 19, 2015 8:25 pm
I'm adding pushbullet support for my apps. Here's my draft.
Pushbullet makes possible to add notification for your apps or send remote commands from your mobile phone. This is useful for monitoring your software running in servers.
Pushbullet documentation @ https://docs.pushbullet.com/
Requirement:
You need to download curl.exe and place on same directory.
Pushbullet makes possible to add notification for your apps or send remote commands from your mobile phone. This is useful for monitoring your software running in servers.
Pushbullet documentation @ https://docs.pushbullet.com/
Requirement:
You need to download curl.exe and place on same directory.
Code: Select all
; By: JCV
; API Documentation @ https://docs.pushbullet.com/
Global accountToken.s
Global PINFO.PROCESS_INFORMATION
Global hWritePipe.l,hReadPipe.l
Global compx.l,last.s,PID.l
Global *PipeMem = AllocateMemory(1024)
Procedure.s ReadProgramOutput()
BytesRead.l = 0
r.l=PeekNamedPipe_(hreadPipe,0,0,0,@BytesRead,0)
If BytesRead>0
o.l=ReadFile_(hReadPipe,*PipeMem,1023,@BytesRead,0)
If o
Ret.s = PeekS(*PipeMem,BytesRead,#PB_UTF8)
RtlZeroMemory_(*PipeMem,1024)
ProcedureReturn Ret
EndIf
EndIf
EndProcedure
Procedure.l RunProgramEx(cmd.s)
SECA.SECURITY_ATTRIBUTES
SECA\nLength=SizeOf(SECURITY_ATTRIBUTES)
SECA\bInheritHandle=1
SECA\lpSecurityDescriptor=0
xx.l=CreatePipe_(@hReadPipe,@hWritePipe,@SECA,1)
SINFO.STARTUPINFO
SINFO\cb=SizeOf(STARTUPINFO)
SINFO\dwFlags=#STARTF_USESTDHANDLES|#STARTF_USESHOWWINDOW
SINFO\hStdOutput=hWritePipe
SINFO\hStdError=hWritePipe
ResultC = CreateProcess_(0,cmd,@SECA,@SECA,1,#CREATE_NEW_CONSOLE,0,0,@SINFO,@PINFO)
PID = PINFO\dwProcessId
ProcedureReturn ResultC
EndProcedure
Procedure.l ProgramRunningEx()
GetExitCodeProcess_(PINFO\hProcess,@exitcode)
If ExitCode=259
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
EndProcedure
Procedure.l KillProgramEx()
phandle = OpenProcess_(#PROCESS_TERMINATE, #False, pid)
If phandle <> #Null
If TerminateProcess_(phandle, 1)
result = #True
EndIf
CloseHandle_(phandle)
EndIf
ProcedureReturn result
EndProcedure
Procedure.l CloseProgramEx()
CloseHandle_(PINFO\hProcess)
CloseHandle_(PINFO\hThread)
CloseHandle_(hReadPipe)
ProcedureReturn 1
EndProcedure
Procedure.s pushbullet_clean_text(Returns.s)
Returns = ReplaceString(Returns, "\" + #DOUBLEQUOTE$, #DOUBLEQUOTE$)
Returns = ReplaceString(Returns, "]", "")
Returns = ReplaceString(Returns, "[", "")
Returns = ReplaceString(Returns, "{", "")
Returns = ReplaceString(Returns, "}", "")
Returns = ReplaceString(Returns, "'", "")
ProcedureReturn Returns
EndProcedure
Procedure pushbullet_check_account()
Protected Returns.s
line$ = "https://api.pushbullet.com/v2/users/me --header " + #DOUBLEQUOTE$ + "Authorization: Bearer " + accountToken + #DOUBLEQUOTE$
If RunProgramEx("curl -s " + line$)
While ProgramRunningEx()
Returns + ReadProgramOutput()
Wend
CloseProgramEx()
KillProgramEx()
If Returns <> ""
Returns = pushbullet_clean_text(Returns)
total = CountString(Returns, ",")
For x = 1 To total
Debug StringField(Returns, x, ",")
Next
EndIf
Else
Debug GetLastError_()
EndIf
EndProcedure
Procedure pushbullet_send_message(title.s = "title", body.s = "body", iden.s = "")
Protected Returns.s
line$ = "https://api.pushbullet.com/v2/pushes -X POST -u " + accountToken
line$ + ": --header " + #DOUBLEQUOTE$ + "Content-Type: application/json" + #DOUBLEQUOTE$ + " --Data-binary " + #DOUBLEQUOTE$
line$ + "{\"
If Len(iden) > 0 ; if iden is empty, it will send to all devices
line$ + #DOUBLEQUOTE$ + "device_iden\" + #DOUBLEQUOTE$ + ": \" + #DOUBLEQUOTE$ + iden + "\" + #DOUBLEQUOTE$
line$ + ", \"
EndIf
line$ + #DOUBLEQUOTE$ + "type\" + #DOUBLEQUOTE$ + ": \" + #DOUBLEQUOTE$ + "note\" + #DOUBLEQUOTE$
line$ + ", \"
line$ + #DOUBLEQUOTE$ + "title\" + #DOUBLEQUOTE$ + ":\" + #DOUBLEQUOTE$ + title + "\" + #DOUBLEQUOTE$
line$ + ", \"
line$ + #DOUBLEQUOTE$ + "body\" + #DOUBLEQUOTE$ + ": \" + #DOUBLEQUOTE$ + body + "\" + #DOUBLEQUOTE$
line$ + "}" + #DOUBLEQUOTE$
Debug line$
If RunProgramEx("curl -s " + line$)
While ProgramRunningEx()
Returns + ReadProgramOutput()
Wend
CloseProgramEx()
KillProgramEx()
If Returns <> ""
Returns = pushbullet_clean_text(Returns); Debug Returns
total = CountString(Returns, ",")
For x = 1 To total
Debug StringField(Returns, x, ",")
Next
EndIf
Else
Debug GetLastError_()
EndIf
EndProcedure
Procedure pushbullet_get_devices()
Protected Returns.s
line$ = "https://api.pushbullet.com/v2/devices -X GET "
line$ + " --header " + #DOUBLEQUOTE$ + "Authorization: Bearer " + accountToken + #DOUBLEQUOTE$
If RunProgramEx("curl -s " + line$)
While ProgramRunningEx()
Returns + ReadProgramOutput()
Wend
CloseProgramEx()
KillProgramEx()
If Returns <> ""
Returns = pushbullet_clean_text(Returns)
total = CountString(Returns, ",")
For x = 1 To total
Debug StringField(Returns, x, ",")
Next
EndIf
Else
Debug GetLastError_()
EndIf
EndProcedure
Procedure pushbullet_create_device(stream_device.s = "sample_device")
Protected Returns.s
line$ = "https://api.pushbullet.com/v2/devices -X POST -d nickname=" + #DOUBLEQUOTE$ + stream_device + #DOUBLEQUOTE$ + " type=stream"
line$ + " --header " + #DOUBLEQUOTE$ + "Authorization: Bearer " + accountToken + #DOUBLEQUOTE$
If RunProgramEx("curl -s " + line$)
While ProgramRunningEx()
Returns + ReadProgramOutput()
Wend
CloseProgramEx()
KillProgramEx()
If Returns <> ""
Returns = pushbullet_clean_text(Returns)
total = CountString(Returns, ",")
For x = 1 To total
Debug StringField(Returns, x, ",")
Next
EndIf
Else
Debug GetLastError_()
EndIf
EndProcedure
Procedure pushbullet_update_device(iden.s, stream_device.s = "new_device_name")
Protected Returns.s
line$ = "https://api.pushbullet.com/v2/devices/" + iden + " -X POST -d nickname=" + #DOUBLEQUOTE$ + stream_device + #DOUBLEQUOTE$
line$ + " --header " + #DOUBLEQUOTE$ + "Authorization: Bearer " + accountToken + #DOUBLEQUOTE$
If RunProgramEx("curl " + line$)
While ProgramRunningEx()
Returns + ReadProgramOutput()
Wend
CloseProgramEx()
KillProgramEx()
If Returns <> ""
Returns = pushbullet_clean_text(Returns)
total = CountString(Returns, ",")
For x = 1 To total
Debug StringField(Returns, x, ",")
Next
EndIf
Else
Debug GetLastError_()
EndIf
EndProcedure
Procedure pushbullet_delete_device(iden.s)
Protected Returns.s
line$ = "https://api.pushbullet.com/v2/devices/" + iden + " -X DELETE "
line$ + " --header " + #DOUBLEQUOTE$ + "Authorization: Bearer " + accountToken + #DOUBLEQUOTE$
If RunProgramEx("curl -s " + line$)
While ProgramRunningEx()
Returns + ReadProgramOutput()
Wend
CloseProgramEx()
KillProgramEx()
If Returns <> ""
Returns = pushbullet_clean_text(Returns)
total = CountString(Returns, ",")
For x = 1 To total
Debug StringField(Returns, x, ",")
Next
EndIf
Else
Debug GetLastError_()
EndIf
EndProcedure
Procedure pushbullet_get_messages(iden.s = "")
Protected Returns.s
line$ = "https://api.pushbullet.com/v2/pushes?modified_after=0&active=true -X GET "
line$ + " --header " + #DOUBLEQUOTE$ + "Authorization: Bearer " + accountToken + #DOUBLEQUOTE$
If RunProgramEx("curl -s " + line$)
While ProgramRunningEx()
Returns + ReadProgramOutput()
Wend
CloseProgramEx()
KillProgramEx()
If Returns <> ""
Returns = pushbullet_clean_text(Returns);
total = CountString(Returns, ",")
For x = 1 To total
Debug StringField(Returns, x, ",")
Next
EndIf
Else
Debug GetLastError_()
EndIf
EndProcedure
Procedure pushbullet_delete_message(push_iden.s = "")
Protected Returns.s
If Len(push_iden) > 0 ; delete specific message
line$ = "https://api.pushbullet.com/v2/pushes/" + push_iden + " -X DELETE "
Else ; delete all messages
line$ = "https://api.pushbullet.com/v2/pushes -X DELETE "
EndIf
line$ + " --header " + #DOUBLEQUOTE$ + "Authorization: Bearer " + accountToken + #DOUBLEQUOTE$
If RunProgramEx("curl -s " + line$)
While ProgramRunningEx()
Returns + ReadProgramOutput()
Wend
CloseProgramEx()
KillProgramEx()
If Returns <> ""
Returns = pushbullet_clean_text(Returns); Debug Returns
total = CountString(Returns, ",")
For x = 1 To total
Debug StringField(Returns, x, ",")
Next
EndIf
Else
Debug GetLastError_()
EndIf
EndProcedure
Procedure pushbullet_upload_image(image_path.s)
Protected Returns.s
line$ = "https://api.pushbullet.com/v2/upload-request -X POST -d file_name=" + #DOUBLEQUOTE$ + image_path + #DOUBLEQUOTE$ + " file_type=image/jpg"
line$ + " --header " + #DOUBLEQUOTE$ + "Authorization: Bearer " + accountToken + #DOUBLEQUOTE$
If RunProgramEx("curl -s " + line$)
While ProgramRunningEx()
Returns + ReadProgramOutput()
Wend
CloseProgramEx()
KillProgramEx()
If Returns <> ""
Returns = pushbullet_clean_text(Returns); Debug Returns
total = CountString(Returns, ",")
For x = 1 To total
Debug StringField(Returns, x, ",")
Next
EndIf
Else
Debug GetLastError_()
EndIf
EndProcedure
; Enter your Access Token. Get yours @ https://www.pushbullet.com/account
accountToken = ""
If accountToken <> ""
pushbullet_check_account()
pushbullet_create_device("register_sample_device")
; pushbullet_update_device("ajz3F0PR0QmsjxtSbKapaL", "rename_device")
; pushbullet_get_devices()
; pushbullet_delete_message()
; pushbullet_delete_device()
; pushbullet_get_messages()
; pushbullet_send_message("mytitle", "mybody")
Else
MessageRequester("", "Get your own Access Token @ http://www.pushbullet.com")
EndIf