Επαναφορά website(PERL/HTML/PHP)

...IDE, compilers, κλπ

Συντονιστής: konnn

Re: Επαναφορά website(PERL/HTML/PHP)

Δημοσίευσηαπό medigeek » 25 Ιούλ 2011, 10:00

Βρήκα ένα παλιό πρόγραμμα με perl mechanize που είχα φτιάξει. ( Τώρα δε θυμάμαι τόσο λεπτομερώς τη γλώσσα perl. :P )
Μπορεί να σε βοηθήσει όμως, κάνει login και εμφανίζει στατιστικά από την ιστοσελίδα του φόρουμ. :)

Το GetHTTP και το GetForumStats είναι ξεχωριστά "package" ("classes") στο ίδιο αρχείο. Έτσι ξεχώρισα το html parser από το κυρίως script.
Κώδικας: Επιλογή όλων
#!/usr/bin/perl
# Perl script to get latest users in a forum (phpbb3).
# Requires: WWW::Mechanize HTML::Parser
# Also: date
# sudo apt-get install libwww-mechanize-perl libhtml-parser-perl
#
# Copyright (c) 2009 Savvas Radevic <>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#

use strict;
use warnings;
#use diagnostics;
use WWW::Mechanize;
use Term::ReadKey;

# Your forum's link
#my $forumroot = 'http://www.ubuntucy.org/forum/';
my $forumroot = 'http://forum.ubuntu-gr.org/';

# Login page
my $loginpage = 'ucp.php?mode=login';

# User login
# Set your username
my $username = 'medigeek';

# last day of last month
my $datecmd = 'date -d "1 month ago $(date +%Y-%m-01)" +%Y-%m-%d';
my $lastdaylastmonth = `$datecmd`;

# Members by date link
my $byjoindate = "memberlist.php?sk=c&sd=a&mode=searchuser&search_group_id=0&joined_select=gt&count_select=eq&joined=$lastdaylastmonth";

# By number of posts
my $byposts = "memberlist.php?mode=&sk=d&sd=d";



if ($username eq '') {
print "Type your username: ";
$username = <>;
chomp($username);
}
print "Type password for $username: ";
ReadMode(4);
my $password = ReadLine(0);
print "\n";
ReadMode(0);


my $m = WWW::Mechanize->new(
agent => 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.6) Gecko/2009022716 Ubuntu/9.04 (jaunty) Firefox/3.0.6',
cookie_jar => {},
);

print "Getting ".$forumroot.$loginpage."\n";
$m->get($forumroot.$loginpage);
die "Could not get page\n" unless $m->success;

# Login
print "Logging in...\n";
$m->form_id('login');
$m->set_fields(
'username' => $username,
'password' => $password,
);
$m->add_header('Referer' => $forumroot.$loginpage);
$m->click_button(name => 'login');
die "Could not submit to login page\n" unless $m->success;

# Get member info
print "Getting users that have been registered at the forum a month ago ($lastdaylastmonth)\n";
$m->get($forumroot.$byjoindate);
die "Could not get page ".$forumroot.$byjoindate."\n" unless $m->success;
my $gethttp = GetHTTP->new;
$gethttp->parse($m->content);

# Get top posters
print "\nGetting top posters information\n";
$m->get($forumroot.$byposts);
die "Could not get page ".$forumroot.$byposts."\n" unless $m->success;
$gethttp->parse($m->content);

# Get statistics
print "\nGetting general statistics\n";
$m->get($forumroot);
die "Could not get page $forumroot\n" unless $m->success;
my $getstats = GetForumStats->new;
$getstats->parse($m->content);

print "\nAll done.\n";



package GetHTTP;
use base qw(HTML::Parser);
our ($tr_tag, $td_tag, $a_tag);
sub start {
my ($self, $tag, $attr, $attrlist, $origtext) = @_;
if ($tag =~ /^tr$/i and $attr->{class} and $attr->{class} =~ /^bg[12]/i) {
$tr_tag = 1;
}
elsif ($tag =~ /^td$/i and $tr_tag) {
$td_tag = 1;
}
elsif ($tag =~ /^a$/i and $td_tag and $tr_tag) {
$a_tag = 1;
}
}
sub text {
my ($self, $plaintext) = @_;
# If we're in the anchor tag
no warnings "uninitialized";
if ($tr_tag and $td_tag and $a_tag) {
print("Data: $plaintext\n");
}
}
sub end {
my ($self, $tag, $origtext) = @_;
if ($tag =~ /^tr$/i) { $tr_tag = 0; }
elsif ($tag =~ /^td$/i) { $td_tag = 0; }
elsif ($tag =~ /^a$/i) { $a_tag = 0; }
}

package GetForumStats;
use base qw(HTML::Parser);
our ($h3_tag, $h3_wanted_tag, $p_tag, $strong_tag);
our $num = 0;
sub start {
my ($self, $tag, $attr, $attrlist, $origtext) = @_;
if ($tag =~ /^h3$/i) {
$h3_tag = 1;
}
elsif ($tag =~ /^p$/i and $h3_wanted_tag) {
$p_tag = 1;
}
elsif ($tag =~ /^strong$/i and $p_tag and $h3_wanted_tag) {
$strong_tag = 1;
}
}
sub text {
my ($self, $plaintext) = @_;
my @arraydesc = ("Total posts", "Total topics", "Total members");
# If it's the <h3> tag we're looking for
if ($h3_tag and $plaintext =~ /^Statistics$/) { $h3_wanted_tag = 1; }
if ($strong_tag and $p_tag and $h3_wanted_tag) {
no warnings "uninitialized";
if ($num < 3) {
print $arraydesc[$num].": $plaintext\n";
$num++;
}
}
}
sub end {
my ($self, $tag, $origtext) = @_;
if ($tag =~ /^h3$/i) { $h3_tag = 0; }
elsif ($tag =~ /^p$/i) {
$p_tag = 0;
$h3_wanted_tag = 0; # Disable h3_wanted_tag (left </p>)
}
elsif ($tag =~ /^strong$/i) { $strong_tag = 0; }
}


Για bsd (freebsd) δεν ξέρω πολλά, αλλά μπορείς να βρεις ports από το www.freshports.org

Ενδιαφέροντα φαίνονται τα ακόλουθα:
p5-WWW-Mechanize
p5-WWW-Mechanize-CGI
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

Re: Επαναφορά website(PERL/HTML/PHP)

Δημοσίευσηαπό Qdata » 25 Ιούλ 2011, 10:48

medigeek έγραψε:p5-WWW-Mechanize
p5-WWW-Mechanize-CGI


Αυτά πρέπει να εγκαταστήσει;
Αν ναι για BSD:
Κώδικας: Επιλογή όλων
Για εγκατάσταση του port: cd /usr/ports/www/p5-WWW-Mechanize/ && make install clean
Για προσθήκη του πακέτου: pkg_add -r p5-WWW-Mechanize

+

Κώδικας: Επιλογή όλων
Για εγκατάσταση του port: cd /usr/ports/www/p5-WWW-Mechanize-CGI/ && make install clean
Για προσθήκη του πακέτου: pkg_add -r p5-WWW-Mechanize-CGI
Linux User: #530165
Γνώσεις ⇛ Linux: Μέτριο ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
Λειτουργικό ⇛ Ubuntu 11.04 32bit σε Intel(R) Atom(TM) CPU N270 @ 1.60GHz
(Notebook) Προδιαγραφές ⇛ 2x Intel(R) Atom(TM) CPU N270 @ 1.60GHz │ 1016MB │ HDA-Intel - HDA Intel -- USB-Audio - USB AUDIO│ 1024x600 pixels
Νέος στο Linux?Οδηγοί - How to - Tutorials
Qdata
powerTUX
powerTUX
 
Δημοσιεύσεις: 1875
Εγγραφή: 18 Ιουν 2010, 19:40
Τοποθεσία: Σέρρες
IRC: dimos
Εκτύπωση

Re: Επαναφορά website(PERL/HTML/PHP)

Δημοσίευσηαπό medigeek » 25 Ιούλ 2011, 12:53

Qdata έγραψε:Αυτά πρέπει να εγκαταστήσει;

Αν θέλει να χρησιμοποιήσει το perl mechanize, ναι. :) Μάλλον και το p5-HTML-Parser πακέτο.
Υπάρχει κι άλλος τρόπος, αλλά η εγκατάσταση με πακέτα είναι πάντα ο ευκολότερος τρόπος κατά τη γνώμη μου.

Απ'ό,τι κατάλαβα, το pkg_add -r είναι η αντίστοιχη εντολή για εγκατάσταση binary πακέτων debian (apt-get install mypackage). Το άλλο κάνει compile το πακέτο.
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

Re: Επαναφορά website(PERL/HTML/PHP)

Δημοσίευσηαπό Qdata » 25 Ιούλ 2011, 13:11

medigeek έγραψε:Απ'ό,τι κατάλαβα, το pkg_add -r είναι η αντίστοιχη εντολή για εγκατάσταση binary πακέτων debian (apt-get install mypackage). Το άλλο κάνει compile το πακέτο.


Σωστά. ;)
Η:
Κώδικας: Επιλογή όλων
cd /usr/ports/www/p5-WWW-Mechanize/ && make install clean

Παίρνει τον πηγαίο κώδικα, τον αποσυμπιέζει στο σύστημά, εφαρμόζει τα patches, και το μεταγλωττίζει.

Η:
Κώδικας: Επιλογή όλων
pkg_add -r p5-WWW-Mechanize

Προσθέτει το πακέτο και στη συνέχεια θα είναι έτοιμο για χρήση.
Linux User: #530165
Γνώσεις ⇛ Linux: Μέτριο ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
Λειτουργικό ⇛ Ubuntu 11.04 32bit σε Intel(R) Atom(TM) CPU N270 @ 1.60GHz
(Notebook) Προδιαγραφές ⇛ 2x Intel(R) Atom(TM) CPU N270 @ 1.60GHz │ 1016MB │ HDA-Intel - HDA Intel -- USB-Audio - USB AUDIO│ 1024x600 pixels
Νέος στο Linux?Οδηγοί - How to - Tutorials
Qdata
powerTUX
powerTUX
 
Δημοσιεύσεις: 1875
Εγγραφή: 18 Ιουν 2010, 19:40
Τοποθεσία: Σέρρες
IRC: dimos
Εκτύπωση

Re: Επαναφορά website(PERL/HTML/PHP)

Δημοσίευσηαπό linuxs » 25 Ιούλ 2011, 19:04

Κώδικας: Επιλογή όλων
use strict;
use warnings;
#use diagnostics;
use WWW::Mechanize;
use Term::ReadKey;

αυτά τι κάνουν?
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ Linux: Μέτριο┃Προγραμματισμός: C┃Αγγλικά: Καλά
Λειτουργικό ⇛ Linux Ubuntu 10.4 LTS
Προδιαγραφές ⇛ Intel Pentium @T4500 2.3GHz│ 512GB VRAM│ 500 HDD│ ATI RADEON HD545v 512 MB │ Screen: 15.6''
Άβαταρ μέλους
linuxs
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1060
Εγγραφή: 02 Ιούλ 2010, 13:19
Τοποθεσία: GR
IRC: linuxs
Εκτύπωση

Re: Επαναφορά website(PERL/HTML/PHP)

Δημοσίευσηαπό medigeek » 25 Ιούλ 2011, 19:40

Κώδικας: Επιλογή όλων
use strict;
use warnings;

Αυτά είναι για αρχάριους (όπως εμένα :P). Σε βοηθάει να μάθεις perl με το σωστό τρόπο:
http://perldoc.perl.org/strict.html
http://perldoc.perl.org/warnings.html

Τα υπολοιπα είναι perl modules.
Το Term::ReadKey είναι για να διαβάσεις το input. Αντίστοιχο του raw_input για python:
Κώδικας: Επιλογή όλων

print "Type password for $username: ";
ReadMode(4);
my $password = ReadLine(0);
print "\n";
ReadMode(0);


Το mechanize «αυτοματοποιεί» τη συμπλήρωση των html forms.
Κώδικας: Επιλογή όλων
use WWW::Mechanize;

Κοίταξε το cookbook και το examples εδώ: http://search.cpan.org/~jesse/WWW-Mechanize-1.68/

Παράδειγμα στο παραπάνω script:
Κώδικας: Επιλογή όλων

my $m = WWW::Mechanize->new(
agent => 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.6) Gecko/2009022716 Ubuntu/9.04 (jaunty) Firefox/3.0.6',
cookie_jar => {},
);

print "Getting ".$forumroot.$loginpage."\n";
$m->get($forumroot.$loginpage);
die "Could not get page\n" unless $m->success;

# Login
print "Logging in...\n";
$m->form_id('login');
$m->set_fields(
'username' => $username,
'password' => $password,
);
$m->add_header('Referer' => $forumroot.$loginpage);
$m->click_button(name => 'login');
die "Could not submit to login page\n" unless $m->success;
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

Re: Επαναφορά website(PERL/HTML/PHP)

Δημοσίευσηαπό linuxs » 27 Ιούλ 2011, 02:50

Ξέρει κανείς τι σημείνει το -> στη PERL?
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ Linux: Μέτριο┃Προγραμματισμός: C┃Αγγλικά: Καλά
Λειτουργικό ⇛ Linux Ubuntu 10.4 LTS
Προδιαγραφές ⇛ Intel Pentium @T4500 2.3GHz│ 512GB VRAM│ 500 HDD│ ATI RADEON HD545v 512 MB │ Screen: 15.6''
Άβαταρ μέλους
linuxs
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1060
Εγγραφή: 02 Ιούλ 2010, 13:19
Τοποθεσία: GR
IRC: linuxs
Εκτύπωση

Re: Επαναφορά website(PERL/HTML/PHP)

Δημοσίευσηαπό medigeek » 27 Ιούλ 2011, 11:21

Νομίζω λέγεται "subroutine", δεν είμαι 100% σίγουρος όμως: http://perldoc.perl.org/perlobj.html#A- ... Subroutine
Είναι όπως η τελεία στην python για να καλέσεις μεθόδους ("methods") ή μεταβλητές ("variables") από ένα class ("package").
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

Re: Επαναφορά website(PERL/HTML/PHP)

Δημοσίευσηαπό linuxs » 02 Αύγ 2011, 14:44

Καλησπεα παιδιά,

σε ένα σημείο υπάρχει αυτό στο index.php προφανώς περίπου καταλαβαίνω τι κάνει αυτό που μου κινεί την περιέργεια είναι τα 3 πρώτα input. Έχω χρησιμοποιήσει input γενικότερα αλλα δεν μπορώ να καταλάβω γιατι υπάρχουν εκεί και τι κάνουν? Κυρίως τι δεδομένα παίρνω με αυτά που προφανώς δεν είναι το username & password.
Η σελίδα είναι scylla.cs.uoi.gr για κάποιον που θέλει να ρίξει μια ματιά.


σας ευχαριστώ πολυ!! ;)

Κώδικας: Επιλογή όλων

<form id="form1" name="form1" method="post" action="/cgi-bin/perlpass.pl">
<div align="center">
[color=#FF0000]<input name="sessionid" type="hidden" id="sessionid" value="33" />
<input name="token" type="hidden" id="token" value="<?php echo $_GET['token']; ?>" />
<input name="return_url" type="hidden" id="return_url" value="<?php echo $_GET['return_url']; ?>" />[/color]


<table width="303" border="0" align="center" bgcolor="#FFFFFF">
<tr>
<th width="90" scope="col">&nbsp;</th>
<th width="203" scope="col">&nbsp;</th>
</tr>

<tr>
<td height="29">
<div align="center" class="style2">Username:</div>
</td>

<td>
<span class="style2">
<input name="uname" type="text" id="uname" size="33" />
</span>
</td>
</tr>
<tr>


<td height="31"><div align="center" class="style2">Password:
</div></td>
<td><span class="style2">
<input name="pass" type="password" id="pass" size="33" />
</span></td>
</tr>
<tr>


<td colspan="2"><div align="right">
<input name="Login" type="submit" id="Login" value="Login" />
<input type="reset" name="Submit2" value="Reset" />
</div></td>
</tr>
</table>
</div>
</form>
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ Linux: Μέτριο┃Προγραμματισμός: C┃Αγγλικά: Καλά
Λειτουργικό ⇛ Linux Ubuntu 10.4 LTS
Προδιαγραφές ⇛ Intel Pentium @T4500 2.3GHz│ 512GB VRAM│ 500 HDD│ ATI RADEON HD545v 512 MB │ Screen: 15.6''
Άβαταρ μέλους
linuxs
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1060
Εγγραφή: 02 Ιούλ 2010, 13:19
Τοποθεσία: GR
IRC: linuxs
Εκτύπωση

Re: Επαναφορά website(PERL/HTML/PHP)

Δημοσίευσηαπό Qdata » 02 Αύγ 2011, 14:54

Λες για αυτά;
Κώδικας: Επιλογή όλων
<input name="sessionid" type="hidden" id="sessionid" value="33" />
<input name="token" type="hidden" id="token" value="<?php echo $_GET['token']; ?>" />
<input name="return_url" type="hidden" id="return_url" value="<?php echo $_GET['return_url']; ?>" />

Αν προσέξεις είναι type="hidden" οπότε δεν μπορείς να τα πειράξεις.Πρέπει να είναι κάποιες μεταβλητές/στοιχεία που σχετίζονται με το αρχείο /cgi-bin/perlpass.pl.

Κώδικας: Επιλογή όλων
<form id="form1" name="form1" method="post" action="/cgi-bin/perlpass.pl">
Linux User: #530165
Γνώσεις ⇛ Linux: Μέτριο ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
Λειτουργικό ⇛ Ubuntu 11.04 32bit σε Intel(R) Atom(TM) CPU N270 @ 1.60GHz
(Notebook) Προδιαγραφές ⇛ 2x Intel(R) Atom(TM) CPU N270 @ 1.60GHz │ 1016MB │ HDA-Intel - HDA Intel -- USB-Audio - USB AUDIO│ 1024x600 pixels
Νέος στο Linux?Οδηγοί - How to - Tutorials
Qdata
powerTUX
powerTUX
 
Δημοσιεύσεις: 1875
Εγγραφή: 18 Ιουν 2010, 19:40
Τοποθεσία: Σέρρες
IRC: dimos
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Εφαρμογές για Ανάπτυξη Λογισμικού