sms z aplikace python

Jak ovládat Odorik a používat služby pomocí speciálních programů a aplikací.
Odpovědět
Uživatelský avatar
peekaa
Příspěvky: 109
Registrován: stř 08. srp 2012 16:35:05

sms z aplikace python

Příspěvek od peekaa »

Ahoj,

potřeboval bych poradit. Potřebuji sem tam náhodně posílat na můj mobil v průběhu dne upozornění/SMS. Script v Pythonu již mám hotový (zatím mi vyskakují okna), ale nyní jsem se zasekl, jak poslat SMS přes Odorika, účet mám. Našel jsem nějaké příklady na http://www.odorik.cz/w/api v sekci Odeslání SMS, ale moc nehovím PHP ani Ruby, tak nevím, jak to převést do Pythona. Díky, jestli někdo poradí.

Co zatím mám:

Kód: Vybrat vše

# -*- coding: utf-8 -*- 
import time, random
from tkinter import *

mytimefrom=6
mytimeto=22
mydelayfrom=1*60*60
mydelayto=5*60*60

def showMessage():
    root=Tk()
    x = (root.winfo_screenwidth() - root.winfo_reqwidth()) / 2
    y = (root.winfo_screenheight() - root.winfo_reqheight()) / 2
    root.geometry("+%d+%d" % (x, y))
    root.protocol('WM_TAKE_FOCUS', root.update )
    root.wait_visibility(root)             
    root.attributes('-topmost',1)               
    label=Label(root, text="S bohem", width="10").pack({"side": "left"})
    button=Button(text="OK", width="10", command=lambda:root.destroy()).pack()
    root.mainloop()

while True:
    delaysec=random.randint(mydelayfrom,mydelayto)
    time.sleep(delaysec)
    nowtime=time.localtime()
    if nowtime.tm_hour>=mytimefrom and nowtime.tm_hour<=mytimeto:
        showMessage()
Uživatelský avatar
Zedna
Příspěvky: 736
Registrován: stř 04. dub 2012 0:57:53

Re: sms z aplikace python

Příspěvek od Zedna »

Zde je vlakno o Odorik API, kde jsem dal priklad pouziti Odorik API v programovacim jazyku AutoIt:
http://forum.odorik.cz/viewtopic.php?f=7&t=608

Treba to pomuze ...
Uživatelský avatar
Largon
Příspěvky: 448
Registrován: pon 07. lis 2011 10:14:09

Re: sms z aplikace python

Příspěvek od Largon »

Zdravím,
urllib by asi měla poskytnout všechny funkce, které budete potřebovat. Něco jako:

Kód: Vybrat vše

params = urllib.urlencode({'user': username, 'password': password, 'sender': 'Odorik.cz', 'recipient': dst, 'message': msg})
urllib.urlopen("https://www.odorik.cz/api/v1/sms", params)
Uživatelský avatar
peekaa
Příspěvky: 109
Registrován: stř 08. srp 2012 16:35:05

Re: sms z aplikace python

Příspěvek od peekaa »

super, díky za nakopnutí. Pro případné zájemce tu mám verzi pro Python 3:

Kód: Vybrat vše

import urllib.parse
import urllib.request

params = urllib.parse.urlencode({'user': "user", 'password': "password", 'sender': 'Odorik.cz', 'recipient': dst, 'message': msg})
f = urllib.request.urlopen("https://www.odorik.cz/api/v1/sms?%s" % params)
print(f.read().decode('utf-8'))
MaT
Příspěvky: 364
Registrován: pát 29. bře 2013 14:35:14

Re: sms z aplikace python

Příspěvek od MaT »

Doporučuji používat modul requests. S ním mi to přijde ještě jednodušší - parametry prostě předám v poli a nemusím to řešit přes nějaké urlencode. Navíc co si pamatuji, tak v HTTP protokolu se parametry pro metodu POST předávaly trochu jinak než pro metodu GET (místo nějakých query stringů snad přímo v hlavičce HTTP requestu). S knihovnou requests se to snadno odliší, jakou metodu chce člověk použít. Mimochodem, ten kód, který tu byl uveden, funguje, i když ty parametry dává do URL?

Kód: Vybrat vše

import requests

user = 'xxx'
password = 'yyy'

r = requests.post("https://www.odorik.cz/api/v1/sms", params = {
	'user': user,
	'password': password,
	'sender': '+420...',
	'recipient': '+420...',
	'message': 'Text zpravy'
})
print r.content
Odpověď viz pak http://www.odorik.cz/w/api. Dle odpovědi se pak dá zobrazit i nějaká inteligentní hláška ve smyslu "prošlo to"...
Uživatelský avatar
Largon
Příspěvky: 448
Registrován: pon 07. lis 2011 10:14:09

Re: sms z aplikace python

Příspěvek od Largon »

Metoda urlopen používá GET nebo POST na základě toho, jakým způsobem jsou předány parametry.

V tom případě, co jsem tu postoval já, kdy se předají jako druhý argument funkce, tak se v HTTP použije POST a data jsou správně předána jako application/x-www-form-urlencoded.

Ta verze pro Python 3, kde se nalepí parametry přímo do URL, to pošle GETem. A funguje to proto, že GET pro odesílání SMS podporujeme taky - spousta lidí to vyžadovala.

Ten modul requests jsem neznal, ale taky nejsem žádný velký pythonista a koukám, že to není součastí standardní knihovny. Dobré vědět, že nemusíme Pythonu závidět, protože standardní net/http v Ruby taky stojí za starou belu a lidi radši používají rest-client, httpclient anebo faraday. :-)
MaT
Příspěvky: 364
Registrován: pát 29. bře 2013 14:35:14

Re: sms z aplikace python

Příspěvek od MaT »

Aha, já takhle zkoušel něco z API, pořád jsem se divil, že mi to nejde - a když jsem se poněkolikáté díval do dokumentace k API, tak jsem si konečně všimnul, že zrovna ta konkrétní metoda (bylo to něco jiného, než SMS) se má posílat POSTem a ne GETem... :-)

Právě že v různých urlněco knihovnách byl v Pythonu trochu zmatek (=bordel), tak někdo udělal tenhle modul requests. Sice možná není ve standardní knihovně - ale je na to balíček v Debianu, nebo se to dá snadno nainstalovat přes pip, tak je to myslím jedno. :-)
Odpovědět