magyarorszag.hu értesítési tárhely automatizált feldolgozása

Fórumok

Hello,

Van néhány könyvelő cégem, akik több kliensnek könyvelnek. A mo.hu-n ennek megfelelően havi 3-400 értesítés halmozódik fel. Azt szeretném megoldani, hogy ne kelljen egyenként ráklikkelve letöltögetni az egyes pdf-eket, majd gyalog kinyomtatni, hanem egy script megoldhatná ezt crontab-ból. Perlben meg is írtam már a feldolgozó scriptet, csak azzal akadtam el, hogy wget-tel nem tudok a user nevében töltögetni. megadom a --http-user es --http-password paramétert, valamint a --no-check-certificate opciót, de csak egy üres lapot kapok. Valószínűleg nincs tárolt session-om a serveren, ill. cookie a gépemen.
Van valakinek ötlete, hogy lehet sessiont/cookie-t kezelni wget-tel?

köszi

Hozzászólások

a http-user http-password csak htpasswd nel mukodik. ki kell toltened a bejelentkezsi formot es azt postolni eloszor.

wget --post-data=login=akarmi&pass=ize http://mo.hu/login.php --keep-session-cookies --save-cookies=mohu.dat
majd
wget http://mo.hu/ittapdf.pdf --keep-session-cookies --load-cookies=mohu.dat

persze a post-data csak pelda itt, tcpdumpold le, hogy pontosan mit kell kuldened a loginkor.

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

ugye ha sikerül akkor a scriptel eggyütt megosztod velünk....

---------------------------------------------------------------------
„Az Univerzum már elég nagy és öreg ahhoz, hogy egy fél óráig vigyázzon magára.”

Haladok a dologgal:)

Mar le tudom tolteni a listat, ki tudom mazsolazni vele a nyugtakat es a visszaigazolasokat, elo tudom allitani a pdf-ek linkjeit, es le tudom tolteni a pdf-eket. Mar csak listazni kell, de most megelegeltem, mert azert az apeh-es fiuk mindent megtettek azert, hogy nehogy konnyen lehessen elobbre jutni:)
folyt kov. holnap...

Addig is egy kerdes: hogy nyomtassak, hogy mindenhol jo legyen?
A pdf-et direktben nem lehet atadni, kell egy pdf2postscript?
Milyen nyomtatas parancsra keszuljek? lpr?

>A pdf-et rakd le valahova, aztán a delikvens nyomja, ahogy tudja :-)
Egy egysegsugaru windows_user konyvelo? :O

Az egeszet ugy kepzelem, hogy a cron fogja inditani es beavatkozas nelkul mindent elintez. A konyvelo cegeimnel mindenhol van egy linux server sambaval, azon vannak az adatallomanyok, a klienseken nincs semmi. Ez raer cron alol toltogetni.
Azt hiszem a configba teszek egy $LPR_COMMAND valtozot, aztan mindenki kitolti maganak uri izles szerint. Nalam mindenhol cups van, az elvileg direktben tud pdf-et nyomtatni.

"Milyen nyomtatas parancsra keszuljek? lpr?"

nem biztos hogy értem mi a kérdés, de

lpr file.pdf

is elég, vagy ha másik gépen van a nyomtató, akkor akár ssh-n keresztül, ha nincs cups:

cat file.pdf | ssh gep lpr

egyébként meg ha van hálózati megosztár, akkor:

lpr -P nyomtato file.pdf

> Van valakinek ötlete, hogy lehet sessiont/cookie-t kezelni wget-tel?

Kipróbáltam, ilyen lett:


#!/bin/sh                                                                                                                                                    
                                                                                                                                                             
USER=felh.nev
PASS=jelszo
                                                                                                                                                            
PARMS="--load-cookies=mo.hu.cookies --keep-session-cookies --save-cookies=mo.hu.cookies --no-check-certificate"                                              

wget $PARMS "--post-data=loginPage=1&username=$USER&password=$PASS" \
https://www.magyarorszag.hu/cimlap/pf/Login/loginflow/loginUser -O loginUser.html                                                                            

wget $PARMS "https://www.magyarorszag.hu/allampolgar/szolgaltatasok/tarhely?\
requestsource=kozmuportlet&targetServiceName=FOG/FOGModul/UzenetLista/\
Beerkezett&elsorekord=1&rekordszam=10" -O berkezett.html

#

Hello,

Ma megvolt az 1.0 beta teszt:)
Varom az epito jellegu kritikakat.

Most latom, hogy a hosszu sorok vege lemarad, ezert tordelem....

-cronbol minden honap 22.-en lefut es listaz.
- Konyvelo lanyok ellenorzik, majd kezzel torlik a sikeresen nyomtatott allomanyokat a mohu oldalon.

Problema:
- sikeresen megszerzem a letoltendo pdf nevet, de az apeh 404 hibaval kidob.

Fejlesztesi iranyok:
-- felvesem a 404 hibaval letolthetetlen file-okat egy hibalistara, majd egy napi cronbol probalgatom toltogetni.
-- a biztosan letoltott pdf-eket automatikusan torlom a mohu oldalon.

ket file a script:

1. const.pl
=========================================
#user's data
$USER="xxxxx";
$PWD="xxxx";

#nyugtak letoltese
$RECEIPT_DOWNLOAD=1;

#visszaigazolasok letoltese
$CONFIRMATION_DOWNLOAD=0;

#nyomtatas parancs (printf formatum)
$PRN_CMD="lp -h localhost:631 -d samsung %s";

#don't touch
$COOKIES="mohu.dat";
$WGET = "/usr/bin/wget";
$WGET_OPTIONS="$WGET --no-check-certificate --keep-session-cookies";
$WGET_CMD_OPTIONS = "$WGET_OPTIONS --load-cookies=$COOKIES";

$BASE_URL="https://www.magyarorszag.hu";
$STOCK_URL="$BASE_URL/allampolgar/szolgaltatasok/tarhely";

#login form
$LOGIN_HIDDEN="loginPage=1";
$LOGIN_USER="username";
$LOGIN_PASSWORD="password";
$LOGIN_CMD="$WGET_OPTIONS --save-cookies=$COOKIES --post-data=\"$LOGIN_HIDDEN&$LOGIN_USER=$USER&$LOGIN_PASSWORD=$PWD\" $BASE_URL/ugyfelkapu/bejelentkezve";
$LOGIN_OK="bejelentkezve";
$LOGIN_ERROR="";

$LOGOUT="$WGET_OPTIONS $BASE_URL:443/allampolgar/szolgaltatasok/tarhely/kijelenkezes?_nfls=false";

#list
$LIST_URL="\'$STOCK_URL?requestsource=kozmuportlet&targetServiceName=".
"FOG/FOGModul/UzenetLista/Beerkezett&elsorekord=#!#FIRST#!#&rekordszam=10\'";
$LIST_OUTPUT="list.html";
$LIST_CMD= "$WGET_CMD_OPTIONS -O $LIST_OUTPUT $LIST_URL";
$LIST_PATTERN="erkeztetesiszam=([0-9]+)";
$RECEIPT_PATTERN="Elfogad.+nyugta";
$CONFIRMATION_PATTERN="Visszaigazol";

#pdf
$PDF_LINK="\'$BASE_URL/ertesitesitarhely/letoltes?requestsource=kozmuportlet&targetServiceName=".
"FOG/FOGModul/UzenetLekerdezes/Ideiglenes&erkeztetesiszam=#!#ESZ#!#\'";
$PDF_CMD="$WGET_CMD_OPTIONS -O #!#PDF_NAME#!#.pdf $PDF_LINK";

$ERROR_LIST="error.txt";

=========================================

2. abevdownload.pl
=========================================


#!/usr/bin/perl 

require "./const.pl";
use HTML::TableExtract; 

open ERROR,">>$ERROR_LIST" or die "nem tudom megnyitni a hibalistat:$!\n";

&login or die "nem tudok bejelentkezni!\n";
&processList or die "nem tudom letolteni a listat\n";
&logout;
close ERROR;
exit 1;

sub login() {
	if ( -e $COOKIES ) {
		unlink($COOKIES);
	}
	#print "lcmd:$LOGIN_CMD\n";
	system("wget $LOGIN_CMD");
	if ( -e  $LOGIN_OK ) {
		unlink ($LOGIN_OK);
		return 1;
	}
	unlink ($LOGIN_ERROR);
	return 0;
}

sub processList() {
	my $page=1;
	while ( &processPage($page) ) {
		$page+=10;
	}
	return 1;
}

sub processPage( \$ ) {
	my $page=shift;
	my $cmd =$LIST_CMD;
	my $result;
	$cmd =~ s/#!#FIRST#!#/$page/;
	if ( -e $LIST_OUTPUT ) {
		unlink ($LIST_OUTPUT);
	}
	print "$cmd\n";
	system($cmd);
	if ( -e $LIST_OUTPUT ) {
		$result = &processHtml($LIST_OUTPUT);
		unlink ( $LIST_OUTPUT);
		return $result;
	}
	return 0;
}

sub processHtml( \$ ) {
	my $fileName=shift;
	my $found=0;
	print "filename:$fileName\n";
	$te = HTML::TableExtract->new( attribs => { class => infotable } );
	$te->parse_file($fileName);	

	foreach $ts ($te->tables) {
		foreach $row ($ts->rows) {
			$_="@$row";
			if ($RECEIPT_DOWNLOAD && /$RECEIPT_PATTERN/) {
				$found=1;
				unless  ( &download ( $_ ) ) {
					return 0;
				}
			}
			if ($CONFIRMATION_DOWNLOAD && /$CONFIRMATION_PATTERN/) {
				$found=1;
				unless (	&download ( $_ ) ) {
					return 0;
				}
			}
		}
	}
	return $found;
}

sub download( \$ ) {
	my $name = shift;
	#print "$name\n";
	my $link = $PDF_CMD;
	if ( /^([^\-]+)\D+(\d{1,4})\.(\d{1,2})\.(\d{1,2})\D+(\d{1,2}):(\d{1,2})\D+(\d+)/ ) {
		$esz ="$1$2$3$4$5$6$7";
		$esz =~ s/\n//g;
		$esz =~ s/ //g;
		print "$esz\n";
		$link =~ s/#!#ESZ#!#/$esz/;
		$link =~ s/#!#PDF_NAME#!#/$esz/;
		#print "pdflink:$link\n";
		system($link);
		sleep 5;
		if (-e "$esz.pdf") {
		    if ( -s "$esz.pdf" > 0) {
			    print "printing:".sprintf($PRN_CMD, "$esz.pdf")."\n";
			    system(sprintf($PRN_CMD, "$esz.pdf"));
			    return 1;
		    }
		    else {
			print ERROR "$esz.pdf 0 hosszú\n";
			return 1;
		    }
		}
		return 0;
	}
}

sub logout() {
	return;
	sleep 15;
	system($LOGOUT);
	if (-e $COOKIES) {
		unlink($COOKIES);
	}
}

1;

=========================================

Kipróbáltam, de nekem nem jelentkezik be.


/usr/bin/wget: Unsupported scheme.
--11:14:40--  https://www.magyarorszag.hu/ugyfelkapu/bejelentkezve
           => `bejelentkezve'
Resolving www.magyarorszag.hu... 84.206.104.73
Connecting to www.magyarorszag.hu|84.206.104.73|:443... connected.
WARNING: Certificate verification error for www.magyarorszag.hu: self signed certificate in certificate chain
HTTP request sent, awaiting response... 302 Moved Temporarily
Location: https://www.magyarorszag.hu:443/ugyfelkapu/sikertelenbejelentkezes [following]
--11:14:41--  https://www.magyarorszag.hu/ugyfelkapu/sikertelenbejelentkezes
           => `sikertelenbejelentkezes'
Connecting to www.magyarorszag.hu|84.206.104.73|:443... connected.
WARNING: Certificate verification error for www.magyarorszag.hu: self signed certificate in certificate chain
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]

    [ <=>                                 ] 32.821        --.--K/s

11:14:41 (386.78 KB/s) - `sikertelenbejelentkezes' saved [32821]


FINISHED --11:14:41--
Downloaded: 32.821 bytes in 1 files
nem tudok bejelentkezni!

probald kikommentezni a login fuggvenyben a print parancsot es nezd mg, mit ir ki?

ennek kell lennie:

/usr/bin/wget --no-check-certificate --keep-session-cookies --save-cookies=mohu.dat --post-data="loginPage=1&username=xxx&password=xxx" https://www.magyarorszag.hu/ugyfelkapu/bejelentkezve

lehetseges hiba: nem a /usr/bin/-ben van a wget...

bocs' most latom, hogy a wget lefut, csak nem tud bejelentkezni :)

Ok, megvan a gond. A const.pl -ben rossz helyre írtam a felhasználónevet és a jelszót. Én hibáztam. :)

Jelenleg 2 pdf-et kellett volna leszednie, de csak az egyiket sikerült. A másik az error.txt-be került "0 hosszú" üzenettel. Úgy nézem, hogy az mohu hibája, mert böngészőből sem elérhető.

Nekem tetszik.

Ugyanezt php-ra nem próbálta valaki? Vagy egyáltalán meg lehetne oldani php-ban? Van tárhelyem, crontab is, perl-t nem tudok futtatni rajta (itthon igen, de ezért legyen bekapcsolva a gépem?) Ja, csak letöltés kellene egyelőre. Ha van ötletetek, várom, érdemes-e nekiveselkednem.