NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Login Bot

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Loter
Člen
Avatar
Loter:14.1.2017 12:25

Na internete som našiel kód login bota tak som sa ho rozhodol vyskúšať.

<?php

//Upload a blank cookie.txt to the same directory as this file with a CHMOD/Permission to 777
function login($url,$data){
    $fp = fopen("cookie.txt", "w");
    fclose($fp);
    $login = curl_init();
    curl_setopt($login, CURLOPT_COOKIEJAR, "cookie.txt");
    curl_setopt($login, CURLOPT_COOKIEFILE, "cookie.txt");
    curl_setopt($login, CURLOPT_TIMEOUT, 40000);
    curl_setopt($login, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($login, CURLOPT_URL, $url);
    curl_setopt($login, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
    curl_setopt($login, CURLOPT_FOLLOWLOCATION, TRUE);
    curl_setopt($login, CURLOPT_POST, TRUE);
    curl_setopt($login, CURLOPT_POSTFIELDS, $data);
    ob_start();
    return curl_exec ($login);
    ob_end_clean();
    curl_close ($login);
    unset($login);
}

function grab_page($site){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
    curl_setopt($ch, CURLOPT_TIMEOUT, 40);
    curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
    curl_setopt($ch, CURLOPT_URL, $site);
    ob_start();
    return curl_exec ($ch);
    ob_end_clean();
    curl_close ($ch);
}

function post_data($site,$data){
    $datapost = curl_init();
        $headers = array("Expect:");
    curl_setopt($datapost, CURLOPT_URL, $site);
        curl_setopt($datapost, CURLOPT_TIMEOUT, 40000);
    curl_setopt($datapost, CURLOPT_HEADER, TRUE);
        curl_setopt($datapost, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($datapost, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
    curl_setopt($datapost, CURLOPT_POST, TRUE);
    curl_setopt($datapost, CURLOPT_POSTFIELDS, $data);
        curl_setopt($datapost, CURLOPT_COOKIEFILE, "cookie.txt");
    ob_start();
    return curl_exec ($datapost);
    ob_end_clean();
    curl_close ($datapost);
    unset($datapost);
}

?>

<?php
echo login("stránka","POST_data");


?>

Na stránke typu itnetwork funguje bezproblémov ale keď sa chcem prihlásiť cez program na FB,Centrum,Gmail program nevypíše nič. Rozmýšľal som či to nebude nejakým SESSION_ID alebo COOKIE ale ak aj áno neviem kde ho mám doplniť.

Odpovědět
14.1.2017 12:25
Kto vie dobre programovať, nemusí sa pretvarovať :)
Avatar
Loter
Člen
Avatar
Loter:14.1.2017 14:26

Zistil som, že na prihlásenie potrebujem okrem COOCKIE aj Token. Stále však neviem ako a kde ho vložiť.

Nahoru Odpovědět
14.1.2017 14:26
Kto vie dobre programovať, nemusí sa pretvarovať :)
Avatar
Odpovídá na Loter
Neaktivní uživatel:14.1.2017 14:42

Ahoj,
bohužel ti na tvůj dotaz neodpovím, ale pokud bys to chtěl za nějakým konkrétním účelem, například odesílat maily, nebo zveřejňovat příspěvky na Facebooku, tak můžeš využít jejich API, které je k tomu určené.

https://developers.google.com/gmail/api/
https://developers.facebook.com/

Nahoru Odpovědět
14.1.2017 14:42
Neaktivní uživatelský účet
Avatar
Loter
Člen
Avatar
Odpovídá na Neaktivní uživatel
Loter:14.1.2017 14:56

S tým prihlásením to je dosť dôležité keďže potrebujem aby sa PHP kód pripojil na hocijakú stránku (čiže s tými API mi to bohužiaľ nepomôže).

Nahoru Odpovědět
14.1.2017 14:56
Kto vie dobre programovať, nemusí sa pretvarovať :)
Avatar
Loter
Člen
Avatar
Loter:15.1.2017 16:09

Našiel som jeden zajímavý kód, ktorý z časti funguje (https://davidwalsh.name/gmail-php-imap)

/* connect to gmail */
$hostname = '{imap.gmail.com:993/imap/ssl}INBOX';
$username = '[email protected]';
$password = 'davidwalsh';

/* try to connect */
$inbox = imap_open($hostname,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error());

/* grab emails */
$emails = imap_search($inbox,'ALL');

/* if emails are returned, cycle through each... */
if($emails) {

        /* begin output var */
        $output = '';

        /* put the newest emails on top */
        rsort($emails);

        /* for every email... */
        foreach($emails as $email_number) {

                /* get information specific to this email */
                $overview = imap_fetch_overview($inbox,$email_number,0);
                $message = imap_fetchbody($inbox,$email_number,2);

                /* output the email header information */
                $output.= '<div class="toggler '.($overview[0]->seen ? 'read' : 'unread').'">';
                $output.= '<span class="subject">'.$overview[0]->subject.'</span> ';
                $output.= '<span class="from">'.$overview[0]->from.'</span>';
                $output.= '<span class="date">on '.$overview[0]->date.'</span>';
                $output.= '</div>';

                /* output the email body */
                $output.= '<div class="body">'.$message.'</div>';
        }

        echo $output;
}

/* close the connection */
imap_close($inbox);

Aj tak treba zrušiť na gmaily nejakú ochranu ale stále lepšie ako nič. Čo je horšie výpis je dosť zlý. Potreboval by som napr. vypísať čisto len ľavú stranu (Doručená počta, Odoslaná pošta...) + asi tak nieje nastavený niečo iné ako UTF-8 keďže má problém s výpisom v SK. Nejaké nápady?

Nahoru Odpovědět
15.1.2017 16:09
Kto vie dobre programovať, nemusí sa pretvarovať :)
Avatar
Loter
Člen
Avatar
Loter:15.1.2017 16:17

Konkrétne pri tom ľavom stĺpci je DIV <div class="r9gPwb bQ" style="width: auto;"> ale tu už trocha neovládam syntax... konkrétne toto nefunguje

$output.= '<div class="r9gPwb bQ>';
    $output.= '</div>';
Editováno 15.1.2017 16:18
Nahoru Odpovědět
15.1.2017 16:17
Kto vie dobre programovať, nemusí sa pretvarovať :)
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na Loter
Jindřich Máca:15.1.2017 17:02

Ahoj, já na to zkusím jít z trochu jiné strany. Zrovna se psaním všelijakých "botů" mám docela zkušenosti a proto hned na začátek musím říct, že je to poměrně složitá a rozsáhlá disciplína se spoustou zákoutí. Postup, který se mně osobně osvědčil, je stanovit si pevný cíl a jít k němu hezky krok po kroku. Takže moje otázka zní, jakého bota chceš ve výsledku napsat a co všechno by měl umět? :)

 
Nahoru Odpovědět
15.1.2017 17:02
Avatar
Loter
Člen
Avatar
Odpovídá na Jindřich Máca
Loter:15.1.2017 18:25

Bota, ktorý sa pri zavolaní prihlási na stránku xy, ktorú následne oskenuje a oskenovanú stránku mi vypíše.

Nahoru Odpovědět
15.1.2017 18:25
Kto vie dobre programovať, nemusí sa pretvarovať :)
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na Loter
Jindřich Máca:15.1.2017 18:35

Tak to Tě zklamu hned v prvním bodě. Princip přihlášení, i když má podobné prvky, se liší stánku od stánky. Samozřejmě se najdou stránky, na které funguje to samé, ale nějak to zobecnit na libovolný web, to půjde jen opravdu těžko... :-(

A za druhé, úplně nevím, co jsi mám představit pod pojmem "oskenuje stránku". Mohl by jsi být trochu specifičtější? :-)

 
Nahoru Odpovědět
15.1.2017 18:35
Avatar
Loter
Člen
Avatar
Loter:15.1.2017 18:39

To som už zistil :( práve preto som z toho pôvodného kódu čo mám hore prešiel zatiaľ čisto na Gmail. Pojmom oscanovať stŕanku mám namysli uložiť si časť stránky do nejakého stringu (neviem či je slovo oskenovať to správne). Úplna predstava je, že sa PHP kód zavolá, prihlási sa do Gmailu, vytiahne z neho napr. všetky kontakty, ktoré sú práve online a tie mi vypíše na mojej stránke.

Nahoru Odpovědět
15.1.2017 18:39
Kto vie dobre programovať, nemusí sa pretvarovať :)
Avatar
Loter
Člen
Avatar
Loter:15.1.2017 21:29

Konečne som našiel čo som potreboval...
Výsledný kód

<?php
set_time_limit(4000);

// Connect to gmail
$imapPath = '{imap.gmail.com:993/imap/ssl}INBOX';
$username = '[email protected]';
$password = 'password';

// try to connect
$inbox = imap_open($imapPath,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error());

   /* ALL - return all messages matching the rest of the criteria
    ANSWERED - match messages with the \\ANSWERED flag set
    BCC "string" - match messages with "string" in the Bcc: field
    BEFORE "date" - match messages with Date: before "date"
    BODY "string" - match messages with "string" in the body of the message
    CC "string" - match messages with "string" in the Cc: field
    DELETED - match deleted messages
    FLAGGED - match messages with the \\FLAGGED (sometimes referred to as Important or Urgent) flag set
    FROM "string" - match messages with "string" in the From: field
    KEYWORD "string" - match messages with "string" as a keyword
    NEW - match new messages
    OLD - match old messages
    ON "date" - match messages with Date: matching "date"
    RECENT - match messages with the \\RECENT flag set
    SEEN - match messages that have been read (the \\SEEN flag is set)
    SINCE "date" - match messages with Date: after "date"
    SUBJECT "string" - match messages with "string" in the Subject:
    TEXT "string" - match messages with text "string"
    TO "string" - match messages with "string" in the To:
    UNANSWERED - match messages that have not been answered
    UNDELETED - match messages that are not deleted
    UNFLAGGED - match messages that are not flagged
    UNKEYWORD "string" - match messages that do not have the keyword "string"
    UNSEEN - match messages which have not been read yet*/

// search and get unseen emails, function will return email ids
$emails = imap_search($inbox,'ALL');
print_r($emails);
if($emails) {

$output = '';
rsort($emails);

foreach($emails as $mail)
{

    $headerInfo = imap_headerinfo($inbox,$mail);

    $output .= $headerInfo->subject.'<br/>';
    $output .= $headerInfo->toaddress.'<br/>';
    $output .= $headerInfo->date.'<br/>';
    $output .= $headerInfo->fromaddress.'<br/>';

    $emailStructure = imap_fetchstructure($inbox,$mail);

    if(!isset($emailStructure->parts)) {
         $output .= imap_body($inbox, $mail, FT_PEEK);
    } else {
        //
    }

   echo iconv_mime_decode($output); // prekladá do UTF-8
   print_r("<br>");
   $output = '';
}
}
// colse the connection
imap_expunge($inbox);
imap_close($inbox);
?>

Taktiež odporúčam http://php.net/…ook.imap.php
Ďakujem všetkým za pomoc.

Nahoru Odpovědět
15.1.2017 21:29
Kto vie dobre programovať, nemusí sa pretvarovať :)
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.