Wyciągnięcie danych ze stronki i zapis do pliku

Zaczęty przez Szopler, 27 Październik 2008, 11:45

Szopler

Wpadłem na taki oto pomysł...

Mam neta po WLANie, średni sygnał nawet OK bo działa... ale w logach AP co jakiś czas "Deauthenticated by AP / Roaming...".
AP ma możliwość skanowania sygnału w odstępach co ~2s (żadna tam rewelacja) ale kilka skanów pozwala stwierdzić że min sygnał to 23% maks 50%...
AP dane te może przedstawiać na samoodświeżającej się stronce:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="refresh" content="1">
<title>Signal Survey</title>
<script type="text/javascript"></script>
</head>
<body bgcolor="#CBE9EF">
<blockquote>
<font color="#006699" size=4 face="Arial, Helvetica, sans-serif">Signal Survey</font>
<hr size=1 noshade width=550 align=left><br>
<form action=/goform/formWlSiteSurvey method=POST name="formWlSiteSurvey">
<table border=1 width=550>
<tr bgcolor=#808080>

<tr><td align=center width="10%" bgcolor="#C0C0C0"><font size="2"><p id="signal">29</p></td>
</tr>
</table>
</form>
</blockquote>
</body>
</html>
<SCRIPT>
var new_signal = document.getElementById('signal').innerHTML;
if(new_signal==null)
new_signal='---';
parent.frames[0].setnew_signal(new_signal);
</SCRIPT>


I teraz sedno - chciałbym wysmażyć jakiś skrypcik/programik który za każdym odświeżeniem stronki zapisywał mi wartość "signal" do pliku wraz z godziną. Cel - wykres w excelku ;). Da się to jakoś łatwo przpeorwadzić?

Mchl

Pewnie, że się da.
Skrypt mógłby być nawet w PHP (ma w końcu narzędzia do parsowania XML) i uruchamiany regularnie przez cron.

W nagłych wypadkach wzywać przez: mail: mchlpl[at]gmail.com | PM|mchl[a]boincatpoland.org

Szopler


Mchl


W nagłych wypadkach wzywać przez: mail: mchlpl[at]gmail.com | PM|mchl[a]boincatpoland.org

Szopler


Mchl

No to pewnie na xUbuntu możesz zainstalować apache + php (o ile już nie jest zainstalowany). Cron to coś jak harmonogram zadań pod Windows... tyle że działa :)
http://pl.wikipedia.org/wiki/Cron_(Unix)

A skrypt w PHP musi wyszukać w żródle stronki <p id="signal"></p> i zapisać to co jest między tagami :) Można nawet od razu wrzucać to do bazy danych.


Proponuję PHP, bo przy tym siedzę, ale na pewno można to zrobić na 2^10 innych sposobów.

W nagłych wypadkach wzywać przez: mail: mchlpl[at]gmail.com | PM|mchl[a]boincatpoland.org

Szopler


buninek

Pod linuksem latwo przetwrzać za pomocą podstawowych narzędzi dostępnych bezpośrednio z powłoki,
grep, sed, awk, całe textutils (tr, cut, tail). Są wielce użyteczne.

echo -e "`date +'%F %R'`\t`wget -q -O - http://twoja.strona | grep '\<p id="signal"' | sed 's|\(.*signal.>\)\([0-9]*\)\(<\/.*\)|\2|'`" >> signal.txt

Choć jak poprzednik wspomniał można to rozwiązać na 1001 sposobów.

Szopler

Cytat: buninek w 27 Październik 2008, 15:47
echo -e "`date +'%F %R'`\t`wget -q -O - http://twoja.strona | grep '\<p id="signal"' | sed 's|\(.*signal.>\)\([0-9]*\)\(<\/.*\)|\2|'`" >> signal.txt

Niestety nie przejdzie :( - dałem
echo -e "`date +'%F %R'`\t`wget - http://twoja.strona | grep '\<p id="signal"' | sed 's|\(.*signal.>\)\([0-9]*\)\(<\/.*\)|\2|'`" >> signal.txt

i otrzymałem błąd 401 czyli Authentication...
Przeglądarka chyba gdzieś przechowuje login i hasło do AP przez z góry ustalony czas, bo po jednokrotnym zalogowaniu można sobie skanować do woli...

buninek

#9
To nie problem użyj odpowiednich opcji do wgeta lub curla i podstaw w to miejsce.
W sumie to najlepiej telnetuj się na AP i może z niego bezpośrednio pobierać dane bez żadnego
opóźnienia.

zapisz stronę do pliku twoja.strona.html
echo -e "`date +'%F %R'`\t`cat twoja.strona.html | grep '\<p id="signal"' | sed 's|\(.*signal.>\)\([0-9]*\)\(<\/.*\)|\2|'`" >> signal.txt
jeśli jest ok
w to miejsce ..cat twoja.strona.html.. podstaw odpowiednio wget lub curl

GRID

Ten temat wraca do mnie od czasu do czasu. To sobie też napiszę.

Najpierw poznałem metodę pobierania danych za pomocą curl w php.

$curl = curl_init();
//Inicujemy curl
curl_setopt($curl, CURLOPT_URL, http://www.boincatpoland.org);
//pobieramy dane z "http://www.boincatpoland.org"
curl_setopt($curl, CURLOPT_REFERER, "http://www.google.pl/");
//ustawiamy refferer na www.google.pl (niektóre strony mają zabezpieczenia, jak nie mają to można dać www.boincatpoland.org to ktoś w statystykach pomyśli że na naszej stronie są linki do nich)
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
//podążamy za ewentualnym przekierowaniem - nie przydatne w momentach kiedy curl służy nam do sprawdzania poprawności adresów URL
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
//wyniku nie wyświetlamy a zapisujemy do zmiennej co ułatwia prace na wynikach
curl_setopt($curl, CURLOPT_USERAGENT, 'Googlebot/2.1 (+http://www.googlebot.com/bot.html)');
//ustawiamy useragent (niektóre strony mają zabezpieczenia, aby nie lubimy zakazów)
curl_setopt($curl, CURLOPT_TIMEOUT, 70);
//Maksymalny czas połączenia ze stroną
curl_setopt($curl, CURLOPT_HEADER, 0);
//jeżeli dane z nagłówka (header)nie są nam potrzebne.
$strona = curl_exec($curl);
//uruchamiamy skonfigurowanego curla
curl_close($curl);
//zamykamy curla

Cały ten curl zapisuje tekst strony do zmiennej $strona, następnie ze zmienną $strona możemy zrobić co chcemy, np operacje na ciągach - przycinanie, cięcie, wyciąganie zmiennych/stałych

Na rzecz serwera statystyk wymyśliłem coś takiego:
Cron (Linuxowy odpowiednik harmonogramu zadań z Windowsa) ma ustawiane wykonywanie np raz dziennie takiej komendy:
curl -0 http://setiathome.berkeley.edu/stats/team.gz | gzip -d > SETI@Home/team.xml
czyli curl ale z linii komend Linux. W tym przypadku curl pobiera plik team.gz a program gzip rozpakowuje go w locie, zapisując do pliku team.xml. Jest możliwość aby curl przekazywał dane od razu do parsera shella ale jeszcze do tego nie doszedłem.

Troll81