Schrift
[thread]11460[/thread]

Regex matched nicht

Tags: Ähnliche Threads

Leser: 2


<< |< 1 2 3 >| >> 25 Einträge, 3 Seiten
FlorianL
 2008-03-13 15:51
#107001 #107001
User since
2007-05-18
142 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen :)

Irgenwie bekomm ich das matching nicht auf die reihe, dabei ist es sogar ziemlich simpel! :(

Die erste abfrage klappt noch, nummer 2 muss ich noch bearbeiten weil erst noch eine select-box mit angebeben werden muss. Aber die dritte sollte funzen, tut sie aber nich ?! :)

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#!/usr/bin/perl
#
# Script zur abfrage auf neue Patches bei IBM
#
# Author: Florian L  - 13.03.08
#
# Usage: ./checkupdate.pl
#
##############################################
use strict;
use warnings;
use LWP::UserAgent;

my $proxy = 'http://***:***@svproxsg01.****.de:8080/';

my $browser = LWP::UserAgent->new;
$browser->timeout(10);
$browser->proxy(['http','ftp'], $proxy) if defined $proxy;
$browser->cookie_jar({});

sub checkhmc() {
        print ("Trying http://www14.software.ibm.com/webapp/set2/sas/f/hmc/home.html\n");
        my $request = HTTP::Request->new('GET',"http://www14.software.ibm.com/webapp/set2/sas/f/hmc/home.html");
        my $response = $browser->request($request);
        if ($response -> is_success()) {
                my @site = $response->content;
                foreach (@site) {
                        my $line = $_;
                        if ($line =~ m/HMC V7 (.+)<\/a>/g) {
                                print("Aktuelle HMC Version: HMC V7 $1\n");
                        }
                }
        } else {
                print  "ERROR ".$response->message;
        }
}

sub checkfixpack() {
        print ("Trying http://www-912.ibm.com/eserver/support/fixes/fixcentral/pfixpacks/53\n");
        my $request = HTTP::Request->new('GET',"http://www-912.ibm.com/eserver/support/fixes/fixcentral/pfixpacks/53");
        my $response = $browser->request($request);
        if ($response -> is_success()) {
                my @site = $response->content;
                foreach (@site) {
                        my $line = $_;
                        if ($line =~ m/pseriesfixpackinformation\/(.+)\"/g) {
                                print("Fixpack: $1\n");
                        }
                }
        } else {
                print  "ERROR ".$response->message;
        }
}

sub checkvios() {
        print ("Trying http://www14.software.ibm.com/webapp/set2/sas/f/vios/download/home.html\n");
        my $request = HTTP::Request->new('GET',"http://www14.software.ibm.com/webapp/set2/sas/f/vios/download/home.html");
        my $response = $browser->request($request);
        if ($response -> is_success()) {
                my @site = $response->content;
                foreach (@site) {
                        my $line = $_;
                        if ($line =~ m/Fix Pack (.+)<\/b>/g) {
                                print("Vios Fixpack: $1\n");
                        } elsif ($line =~ m/IOSLEVEL: (.+)<\/b>/g) {
                                print("IOS-Level: $1\n");
                        }
                }
        } else {
                print  "ERROR ".$response->message;
        }
}

checkhmc();
checkfixpack();
checkvios();


-Florian
nepos
 2008-03-13 15:59
#107002 #107002
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Uhm, kannst du mal genauer sagen, was du auf was du da matchen willst und was du mit 2. Match meinst?
Eventuell wäre es auch geschickt, den HTML-Spass mit einem der vielen Parser-Modulen zu parsen, da das wesentlich weniger fehleranfällig ist.
FlorianL
 2008-03-13 16:09
#107004 #107004
User since
2007-05-18
142 Artikel
BenutzerIn
[default_avatar]
Hi...

Abfrage 1 ist die checkhmc-sub
Abfrage 2 dann checkfixpack (funzt nicht, ist im moment aber nicht das problem)
Abfrage 3 ist dann die checkvios-sub

und in der checkvios-sub hole ich mir die website "http://www14.software.ibm.com/webapp/set2/sas/f/vi..." und möchte auslesen welche die aktuellste version ist die zum download angeboten wird. Komischerweise greift mein regex dort nicht.

der html-code von der seite:

Code: (dl )
1
2
3
4
<div class='ibm-container-body'>
<p><b>PACKAGE: Fix Pack 10.1</b></p>
<p><b>IOSLEVEL: 1.5.1.1</b></p>
</div>


mein regex:

Code (perl): (dl )
1
2
3
4
5
if ($line =~ m/Fix Pack (.+)<\/b>/g) {
                                 print("Vios Fixpack: $1\n");
                         } elsif ($line =~ m/IOSLEVEL: (.+)<\/b>/g) {
                                 print("IOS-Level: $1\n");
                         }



Ich würde auch gern tools wie mechanize oder ähnliche nutzen, aber das nachinstallieren von 'externen' modulen ist auf der prod umgebung nicht gestattet.
moritz
 2008-03-13 17:19
#107009 #107009
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
FlorianL+2008-03-13 15:09:39--
Ich würde auch gern tools wie mechanize oder ähnliche nutzen, aber das nachinstallieren von 'externen' modulen ist auf der prod umgebung nicht gestattet.


Das hilft jetzt sicher nicht besonders viel, aber über solche Entscheidungen kann ich nur den Kopf schütteln.
Damit zwingt man die Programmier dazu, schlechte Lösungen für Probleme hinzurotzen, für die es schon bessere, stabile und getestete Lösungen gibt.
*grml*
FlorianL
 2008-03-13 17:23
#107010 #107010
User since
2007-05-18
142 Artikel
BenutzerIn
[default_avatar]
Ich weiss, und ich schüttel mit ^^


Hab das Problem nun teilweise gelöst, mir fehlt noch die 2. sub, allerdings muss ich vorher eine selectbox "füllen"

Das probiere ich hiermit (ist quasi aus der cpan-doc rauskopiert)

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sub checkfixpack() {
        my $request = POST 'http://www-912.ibm.com/eserver/support/fixes/fixcentral/pfixpacks/53', [ tl => 'all' ];
        my $response = $browser->request($request);
        if ($response -> is_success()) {
                my @site = $response->content;
                foreach (@site) {
                        my $line = $_;
                        if ($line =~ m/pseriesfixpackinformation\/(.+)\"/g) {
                                print("Fixpack: $1\n");
                        }
                }
        } else {
                print  "ERROR ".$response->message . "\n";
        }
}


xadmp01 # ./updatecheck.pl
Checking for new Versions...
ERROR Found

--

Wie man sieht bringt er einfach nur die Meldung "Found".

Ich weiss gerad nich wirklich was ich falsch gemacht hab, für forms und sonstiges habe ich normalerweise mechanize genutzt... :(


edit: Ich hab den betreffenden html-code vergessen:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
<select class="iform" name="tl" id="tl">
<option value="">Select one</option>
<option value="all">All 5.3</option>
<option value="5300-07-00-0747">TL&nbsp;5300-07-00-0747</option>
<option value="5300-06">TL&nbsp;5300-06</option>
<option value="5300-05">TL&nbsp;5300-05</option>
<option value="5300-04">TL&nbsp;5300-04</option>
<option value="5300-03">ML&nbsp;5300-03</option>
<option value="5300-02">ML&nbsp;5300-02</option>
<option value="5300-01">ML&nbsp;5300-01</option>
</select>
FlorianL
 2008-03-14 10:20
#107024 #107024
User since
2007-05-18
142 Artikel
BenutzerIn
[default_avatar]
Moin, is renee im Urlaub? *fg*
FlorianL
 2008-03-14 10:48
#107027 #107027
User since
2007-05-18
142 Artikel
BenutzerIn
[default_avatar]
Nochmal kurz auf den Punkt gebracht was ich nun tun möchte:

Ich Möchte eine Abfrage auf "http://www-912.ibm.com/eserver/support/fixes/fixce..." starten. Dort werden IBM Fixes angezeigt, jedoch erst nachdem man im OS-Patchlevel filter was ausgewählt hat.

Hier ist das form:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<form name="tlFilter" action="/eserver/support/fixes/fixcentral/pfixpacks/53" method="POST" >
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td colspan="2">
<label for="tl">
<strong>Select a Technology Level</strong>
</label>
</td>
</tr>
<tr>
<td>
<select class="iform" name="tl" id="tl">
<option value="">Select one</option>
<option value="all" selected="selected">All 5.3</option>
<option value="5300-07-00-0747">TL&nbsp;5300-07-00-0747</option>
<option value="5300-06">TL&nbsp;5300-06</option>
<option value="5300-05">TL&nbsp;5300-05</option>
<option value="5300-04">TL&nbsp;5300-04</option>
<option value="5300-03">ML&nbsp;5300-03</option>
<option value="5300-02">ML&nbsp;5300-02</option>
<option value="5300-01">ML&nbsp;5300-01</option>
</select>


Ich möchte dabei alles auswählen, Formname ist also 'tlFilter', Wert des feldes ist 'all' und der request ist POST...

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sub checkfixpack() {
        my $request = POST 'http://www-912.ibm.com/eserver/support/fixes/fixcentral/pfixpacks/53', [ 'tlFilter' => 'all' ];
        my $response = $browser->request($request);
        if ($response -> is_success()) {
                my @site = $response->content;
                foreach (@site) {
                        my $line = $_;
                        if ($line =~ m/pseriesfixpackinformation\/(.+)\"/g) {
                                print("Fixpack: $1\n");
                        }
                }
        } else {
                print  "ERROR ".$response->message . "\n";
        }
}


Ich erhalte beim ausführen nur die Meldung: 'ERROR Found'

Ein print @site zeigt mir auch das das Formular nicht richtig übergeben wurde, ich lande auf der 'normalen' seite...
renee
 2008-03-14 10:55
#107028 #107028
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
FlorianL+2008-03-14 09:20:17--
Moin, is renee im Urlaub? *fg*


Nee, die letzten Tage nur viel offline...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2008-03-14 11:01
#107029 #107029
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Die Antwort ist ein "302 Found"...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2008-03-14 11:03
#107030 #107030
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Probier mal:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/perl

use strict;
use warnings;
use LWP::UserAgent;
use HTTP::Request;

my $req = HTTP::Request->new(
  POST => "http://www-912.ibm.com/eserver/support/fixes/fixcentral/pfixpacks/53",
  [
     tl => 'all',
  ],
);

my $ua  = LWP::UserAgent->new;
push @{ $ua->requests_redirectable }, 'POST';

my $response = $ua->request( $req );

print $response->status_line;
print $response->content;


Edit: Wichtig ist die Zeile 16. Sonst funktioniert der Redirect nicht!
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< |< 1 2 3 >| >> 25 Einträge, 3 Seiten



View all threads created 2008-03-13 15:51.