1 (edytowany przez Upgreydd 2015-08-16 13:56:06)

Temat: Skrypt do pobierania informacji na temat RBM LTE

Cześć, wczoraj wieczorem naszła mnie myśl, że miło by było mieć w LuCI informację na temat mojego konta z Play24, nie myśląc za dużo i nie dobierając zbytnio języka klepnąłem skrypt w pythonie. Nie jest to jeszcze zlinkowane z LuCI, ale działa i w konsoli ładnie wyświetla parametry konta w formacie JSON. Przy tej "wielkości" skryptu nie bawiłem się w jego klasowanie, zwykły inline'r. Skrypt pisałem w 15 minut więc bez wycieczek o jakość kodu proszę bo wiem, że można to zrobić bardziej elegancko.

SKRYPT:

#-*- coding: utf-8 -*-
import json
import mechanize
import re
from bs4 import BeautifulSoup
import sys

__author__ = 'upgreydd'

if len(sys.argv) < 2:
    print "Podaj parametry: " + sys.argv[0] + " login haslo numer*"
    print "=================================================================================================="
    print "login - login do konta Play24"
    print "haslo - hasło do konta Play24"
    print "numer - numer telefonu z internetem RBM - opcjonalne jeśli więcej niż jeden numer na koncie Play24"
    print "=================================================================================================="
    print "przykład: " + sys.argv[0] + " login@mail.domena admin1 123123123"
    sys.exit()


loginpageurl = "https://logowanie.play.pl/opensso/logowanie"
login = sys.argv[1]
password = sys.argv[2]

if len(sys.argv) > 3:
    number = sys.argv[3]

browser = mechanize.Browser()
browser.addheaders = [('User-agent',
                       'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
browser.set_handle_redirect(True)
browser.open(loginpageurl)

browser.select_form(name="Login")
browser.form['IDToken1'] = login
browser.form['IDToken2'] = password
browser.submit()

browser.open("https://m24.play.pl/mplay24-lajt")
browser.select_form(nr=0)
browser.submit()
browser.select_form(nr=0)
browser.submit()
response = browser.open(
    "https://m24.play.pl/mplay24-lajt/home?wicket:bookmarkablePage=:pl.p4.mplay24.view.pages.MyNumbersMain")
bs = BeautifulSoup(response.read(), "html.parser")

try:
    url = bs.find('a', href=True, text=number)
    browser.open("https://m24.play.pl/mplay24-lajt/home" + url['href'])
except:
    pass


response = browser.open("https://m24.play.pl/mplay24-lajt/home/accountUnpaid")
bs = BeautifulSoup(response.read(), "html.parser")

# Stan konta
try:
    account_state = bs.find('span', {"class": "amounts"}).text.splitlines()[1]
except:
    print "Błędne parametry skryptu"
    sys.exit()

# Wazne do
valid_to = bs.find('smalll').text

response = browser.open("https://m24.play.pl/mplay24-lajt/home")
bs = BeautifulSoup(response.read(), "html.parser")

# Numer telefonu
phone_number = bs.find('div', {"class": "top"}).span.text

response = browser.open("https://m24.play.pl/mplay24-lajt/services/desc/2")
bs = BeautifulSoup(response.read(), "html.parser")

# Czy Pakiet LTE bez limitu jest aktywny
lte_status = (re.search('.*\((.*)\)', bs.find('ul', {"class": "sub services"}).a.text).group(1) == u'włączona')

print json.dumps({'phone_number': phone_number, 'valid_to': valid_to, 'account_state': account_state, 'lte_enabled': lte_status})

JAK DZIAŁA NA OPENWRT:

OpenWrt% python fetcher.py 
Podaj parametry: fetcher.py login haslo numer*
==================================================================================================
login - login do konta Play24
haslo - hasło do konta Play24
numer - numer telefonu z internetem RBM - opcjonalne jeśli więcej niż jeden numer na koncie Play24
==================================================================================================
przykład: fetcher.py login@mail.domena admin1 123123123
OpenWrt% python fetcher.py kacper@***** tajnehaslo 535767***
{"phone_number": "535767***", "lte_enabled": true, "account_state": "31,00", "valid_to": "2016-08-10"}
OpenWrt% 

INSTRUKCJA:
Skrypt przyjmuje 2/3 parametry. Login, hasło i jako trzeci parametr nr. telefonu o ile na koncie jest więcej niż jeden numer telefonu.
Skrypt zwraca kolejno: numer telefonu, czy pakiet lte jest aktywny, stan konta, ważność konta

Z czasem (którego mam mało) postaram się rozwinąć ten skrypt i spiąć z LuCI, może ktoś chętny do pomocy? wink Miłego testowania, pozdrawiam

2

Odp: Skrypt do pobierania informacji na temat RBM LTE

Witam

Skrypt "niby" w porządku, ale co dziwne nie widzi  formy "Login" na podanej stronie logowania uniemożliwiając jego finalizację.

Środowisko testowe:

OS.. Debian JESSIE

PYTHON.. VERSION 2.7

Niezbędne pakiety.. "python-bs4" oraz "python-mechanize" w aktualnych wersjach z repo stabilnego wydania Debian.

Edytowałem kod odrobinę, ale za każdym razem nie widzi formy z logowaniem (tj. "Login").

Czy autor skryptu bądź ktoś z forumowiczów obytych z "językiem węża" ;-) mógłby przetestować i potwierdzić działanie powyższego kodu ?