Avatar billede fimo Seniormester
22. marts 2018 - 08:39 Der er 28 kommentarer

automatisk skærmprint / send en mail ?

Hej,
Ved ikke om dette er det rette forum at stille mit spørgsmål, men det jeg ville spørge om er / var muligt er følgende:

"En mulighed for at automatisk sende et skærmprint eller evt data'erne fra en webside hver mandag - fredag kl 18:00 til min egen mail adr ?"

Er det muligt og i givet fald hvordan skal jeg komme igang ?
Ved ikke så meget om programmering men måske var der lavet noget som jeg måske kunne nøjes med at tilrette til mit behov ?
på forhånd tak for evt svar / hjælp
Avatar billede Slater Ekspert
22. marts 2018 - 08:52 #1
Det kan du sagtens. Det nemmeste er at benytte en API som f.eks. https://restpack.io/screenshot (kræver oprettelse, men er gratis op til 100 om måneden).
Det er en helt simpel REST-API, som du kan kalde fra PHP eller bare direkte fra en crontab, hvis du ønsker. At sende mailen kan gøres i samme ombæring.

Du burde altså bare kunne lave et cronjob med noget i stil med:
curl https://restpack.io/api/screenshot/v3/capture?access_token=TOKEN&url=http://ditdomæne.dk > ~/temp.jpg && uuencode ~/temp.jpg | mail -s "Screenshot" din@emailadresse.dk

Virker naturligvis kun på Linux eller en Windows med Linux-emulator (f.eks. MinGW), som f.eks. en webserver til PHP. Men der er også Windows-måder at gøre det på.
Avatar billede fimo Seniormester
22. marts 2018 - 09:36 #2
Hej, tusind tak for det hurtige svar / hjælp, virker som det er den løsning jeg skal bruge men kan udmiddelbar se at det måske nok er lidt over mine evner/viden at komme igang men jeg har oprettet mig som brugere på restpack nu og har et linux webhotel hos surftown.

Der står noget om en "access token" når man logger ind på restpack noget som dette WezxijLkHlS8bOxe.......
er det den jeg skal indsætte i dit eks ?
og kan jeg feks bare kopiere denne sætning ind på mit webhotel ?

"curl https://restpack.io/api/screenshot/v3/capture?access_token=TOKEN&url=http://ditdomæne.dk > ~/temp.jpg && uuencode ~/temp.jpg | mail -s "Screenshot" din@emailadresse.dk

hvor skal denne sætning sættes ind på mit webside / php  og hvordan med tiden
ville gerne sende en mail  kl 18 mandag - fredag hvor skal jeg skrive det henne ?

undskyld disse dumme spørgsmål og kan forstå hvis du ikke orker at svare på dem alle :)
Avatar billede fimo Seniormester
22. marts 2018 - 09:39 #3
så dete eks på restpack siden er det noget jeg skal bruge ?
Render Modes
Full Page

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://restpack.io/api/screenshot/v3/capture?url=http%3A%2F%2Fgoogle.com&width=1280&format=jpg",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => array(
    "x-access-token: TOKEN"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
Avatar billede Slater Ekspert
22. marts 2018 - 09:46 #4
Med et Surftown webhotel er du mere eller mindre begrænset til PHP alene, så du har stadig brug for et crontab et andet sted. Det findes der også webservices til - med mindre der er noget task scheduling indbygget i Surftowns kontrolpanel?

Jeg vil gerne hjælpe dig mere med det, også med koden, men har desværre ikke tid til det nu, da jeg er på arbejde. Men jeg vender gerne tilbage senere, hvis du ikke har fået anden hjælp inden da.
Avatar billede fimo Seniormester
22. marts 2018 - 09:48 #5
det lyder super, jeg er glad for alt den hjælp jeg kan få, så jeg kan sagtens vente :)
Avatar billede Slater Ekspert
22. marts 2018 - 17:29 #6
<?php

define('RESTPACK_TOKEN', 'dit access token her');

function httppost($url, $postdata = [], $headers = []) {
    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_CUSTOMREQUEST => 'POST',
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_POSTFIELDS => http_build_query($postdata),
        CURLOPT_HTTPHEADER => $headers
    ]);
    $rv = curl_exec($ch);
    if (curl_error($ch)) die(curl_error($ch));
    curl_close($ch);
    return $rv;
}

$buffer = httppost(
    'https://restpack.io/api/screenshot/v3/capture',
    [
        'url' => 'https://kilolima.dk',
        'json' => true
    ],
    ["x-access-token: " . RESTPACK_TOKEN]
);

$data = json_decode($buffer);

// $data->image indeholder nu URL'en til billedet på deres CDN.

mail('din@email.dk', 'Screenshot', $data->image);


Dette er første skridt. Hver gang det script bliver udført, bør det tage et screenshot af websiden og - hvis webhotellet er ordentligt konfigureret til mail - sende en e-mail til din@email.dk (husk at skifte) med URL'en til billedet.

Hvis du ønsker at downloade og vedhæfte billedet i stedet, er det også muligt, men prøv lige om dette virker først. Altså put dette i en fil, ret de ting der skal rettes til, læg det på dit webhotel og forsøg at køre den ved at skrive stien i en browser.

Virker det, skal vi bare have sat et cronjob op til at køre det på faste tidspunkter. Det er den nemme del af opgaven.
Avatar billede fimo Seniormester
22. marts 2018 - 19:02 #7
Hej igen,

Tusind tak allerede nu er jeg kommet langt med din store hjælp :)
Da jeg kørte dit script fik jeg en mail med et link til et skærmprint med den side jeg ville have, så det var dejligt....
Men hvis det var muligt at få en mail med download / og vedhæftet billedet så vilel jeg blive endnu mere glad ha ha

og så er der denne del "skal vi bare have sat et cronjob op til at køre det på faste tidspunkter. Det er den nemme del af opgaven." feks mandage-fredage kl 1800

helt perfekt at få sådan en hjælp når man nu ikke selv har disse evner, virkeligt påskønnet....
Avatar billede fimo Seniormester
24. marts 2018 - 17:40 #8
hej igen,
bare til info så får jeg bare en cached version af siden, altså samme side hele tiden, hvordan kan jeg ændre i dit eks at jeg får en ny opdateret side hvergang jeg manuelt køre dit eks?
Avatar billede Slater Ekspert
25. marts 2018 - 11:16 #9
Hvis den bliver ved med at være cachet, så kan vi nok altid tvinge den til at lade være ved at tilføje et tilfældigt genereret query param til url'en.
Men godt du siger det.
Jeg er lige væk fra computere her i weekenden, men har ikke glemt dig ellers.
Avatar billede fimo Seniormester
03. april 2018 - 18:52 #10
nu har jeg forsøgt at læse lidt mere om hvordan man kan løse ovennævnte men kan altså ikke finde en løsning, det er nok bare mig som ikke helt forstår 😊
Avatar billede Slater Ekspert
03. april 2018 - 19:20 #11
Beklager forsinkelsen, men at sende attachments i ren PHP er noget møg, så jeg skulle lige lave et eksempel til dig med et eksternt mail lib.

Det er besværligt at skrive her, så du får et download-link:
https://kilolima.dk/showcase/screenshot.zip

Husk at rette de forskellige ting til i filen screenshot.php - både token og mail-adresser.
Avatar billede Slater Ekspert
03. april 2018 - 19:21 #12
Forresten, hvis det ikke virker, kan det skyldes enten at der ikke er skriveadgang til mappen, noget i mailopsætningen eller at allow_url_fopen ikke er slået til. Hvis du får en fejl, så bare skriv det her, så finder vi ud af det.
Avatar billede fimo Seniormester
03. april 2018 - 20:17 #13
perfekt tusind tak jeg kigger på det imorgen og giver besked tilbage, ha en god aften
Avatar billede fimo Seniormester
04. april 2018 - 10:02 #14
Hej igen,
Nu fik jeg testet filen og fik denne fejl "HTTP ERROR 500"
Jeg har uploaded denne mappe "screenshot" med mappen phpmailer + filen screenshot.php i, jeg har rettet i denne fil screenshot.php
indsat min token her "define('RESTPACK_TOKEN', 'dit token');"
min mail adr her $mail->addAddress('din@emailadresse.dk');
og i ftp har jeg givet skrive, læse tilladelser, ved ikke om jeg har misset noget ?
Avatar billede Slater Ekspert
04. april 2018 - 10:52 #15
En 500 siger os ingenting, vi er nødt til at få en bedre fejlbesked. Prøv at indsætte følgende i toppen af siden, før andet PHP-kode:

ini_set('display_errors', 1);
error_reporting(E_ALL);
Avatar billede fimo Seniormester
04. april 2018 - 11:10 #16
Ja det kan jeg da godt forstår...500 siger ikke meget om fejlen...
Men måske dette her ?
Fatal error: Uncaught exception 'PHPMailer\PHPMailer\Exception' with message 'SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting' in /hsphere/local/home/xxxxxxxx.dk/screenshot/phpmailer/PHPMailer.php:1726 Stack trace: #0 /hsphere/local/home/xxxxxxxx.dk/screenshot/phpmailer/PHPMailer.php(1481): PHPMailer\PHPMailer\PHPMailer->smtpSend('Date: Wed, 4 Ap...', 'This is a multi...') #1 /hsphere/local/home/xxxxxxxx.dk/screenshot/phpmailer/PHPMailer.php(1320): PHPMailer\PHPMailer\PHPMailer->postSend() #2 /hsphere/local/home/xxxxxxxx.dk/screenshot/screenshot.php(50): PHPMailer\PHPMailer\PHPMailer->send() #3 {main} thrown in /hsphere/local/home/xxxxxxxx.dk/screenshot/phpmailer/PHPMailer.php on line 1726
Avatar billede Slater Ekspert
04. april 2018 - 13:52 #17
Ja, det var langt bedre. Men øv, det er det mest besværlige at rette.

PHP's indbyggede mail()-funktion bruger også en server til at afsende mails, den er bare konfigureret i php.ini som din udbyder styrer. Standard er at den ligger på localhost og bruger port 25, hvilket var hvad jeg gik ud fra her, men det lader til ikke at være tilfældet, da den ikke kunne forbinde der.

Så skal vi finde ud af, hvor din webhost har deres SMTP-server liggende - og eventuelt om den kræver login.

Kan du eventuelt prøve at skrive:
echo ini_get('SMTP') . ':' . ini_get('smtp_port');

og fortælle hvad den udskriver?
Avatar billede fimo Seniormester
04. april 2018 - 14:39 #18
Glad for at du vil bruge tid på dette og forsøge at hjælpe for jeg er helt blank på dette område :)

....Kan du eventuelt prøve at skrive:
echo ini_get('SMTP') . ':' . ini_get('smtp_port');

Skal det stå øverst i min screenshot.php fil ?
så får jeg denne besked

localhost:25 Fatal error: Uncaught exception 'PHPMailer\PHPMailer\Exception' with message 'SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting' in /hsphere/local/websted.dk/screenshot/phpmailer/PHPMailer.php:1726 Stack trace: #0 /hsphere/local/websted.dk/screenshot/phpmailer/PHPMailer.php(1481): PHPMailer\PHPMailer\PHPMailer->smtpSend('Date: Wed, 4 Ap...', 'This is a multi...') #1 /hsphere/local/websted.dk/screenshot/phpmailer/PHPMailer.php(1320): PHPMailer\PHPMailer\PHPMailer->postSend() #2 /hsphere/local/websted.dk/screenshot/screenshot.php(52): PHPMailer\PHPMailer\PHPMailer->send() #3 {main} thrown in /hsphere/local/websted.dk/screenshot/phpmailer/PHPMailer.php on line 1726
Avatar billede Slater Ekspert
04. april 2018 - 14:45 #19
Underligt, så er den localhost og port 25, som er standard.

Gider du prøve at skrive følgende, lige under der hvor der står $mail->isSMTP():

$mail->Host = 'localhost';
$mail->Port = 25;

Det burde være standard, men prøv.
Avatar billede fimo Seniormester
04. april 2018 - 15:12 #20
får denne fejl:

Fatal error: Uncaught exception 'PHPMailer\PHPMailer\Exception' with message 'SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting' in /hsphere/local/home/websted.dk/screenshot/phpmailer/PHPMailer.php:1726 Stack trace: #0 /hsphere/local/home/websted.dk/screenshot/phpmailer/PHPMailer.php(1481): PHPMailer\PHPMailer\PHPMailer->smtpSend('Date: Wed, 4 Ap...', 'This is a multi...') #1 /hsphere/local/home/websted.dk/screenshot/phpmailer/PHPMailer.php(1320): PHPMailer\PHPMailer\PHPMailer->postSend() #2 /hsphere/local/home/websted.dk/screenshot/screenshot.php(52): PHPMailer\PHPMailer\PHPMailer->send() #3 {main} thrown in /hsphere/local/home/websted.dk/screenshot/phpmailer/PHPMailer.php on line 1726
Avatar billede Slater Ekspert
05. april 2018 - 09:20 #21
Det var da underligt. Vi ved PHP's indbyggede mail()-funktion virker, og vi ved den bruger localhost:25 - men PHPMailer kan ikke bruge samme? Og det lader ikke til at være en login-ting, da den fejler på connection, ikke authorization.

Jeg kan prøve at lave et eksempel med ren mail() med headers.
Avatar billede fimo Seniormester
11. april 2018 - 08:40 #22
Hej igen,

Jeg tænkte at hvis der var en mellem løsning på dit forslag her,
feks hvor jeg manuelt køre dette program nede under MEN at den sender en mail med en opdateret side hver gang jeg køre det, så kan jeg sagtens bruge det

Men ved ikke om det er muligt at tilføje at den opdatere siden hver gang jeg køre programmet, for i nedenstående eks, der virker det men kun med samme side hele tiden ?

<?php

define('RESTPACK_TOKEN', 'dit access token her');

function httppost($url, $postdata = [], $headers = []) {
    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_CUSTOMREQUEST => 'POST',
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_POSTFIELDS => http_build_query($postdata),
        CURLOPT_HTTPHEADER => $headers
    ]);
    $rv = curl_exec($ch);
    if (curl_error($ch)) die(curl_error($ch));
    curl_close($ch);
    return $rv;
}

$buffer = httppost(
    'https://restpack.io/api/screenshot/v3/capture',
    [
        'url' => 'https://kilolima.dk',
        'json' => true
    ],
    ["x-access-token: " . RESTPACK_TOKEN]
);

$data = json_decode($buffer);

// $data->image indeholder nu URL'en til billedet på deres CDN.

mail('din@email.dk', 'Screenshot', $data->image);
Avatar billede Slater Ekspert
11. april 2018 - 12:47 #23
De har en cache som burde udløbe efter et stykke tid. Men hvis du får det samme screenshot flere dage i træk, så kan du manuelt undgå den ved at tilføje en tilfældig streng til enden af url'en i en query string, så serveren serverer samme side men Restpacks service tror det er en anden side.

F.eks. ''url' => 'https://kilolima.dk' . '?v=' . md5(microtime(true)),

Ellers kan jeg stadig godt kigge på alternativet, når jeg lige får tid.
Avatar billede fimo Seniormester
11. april 2018 - 13:35 #24
Hej igen,
Ja du må gerne kigge på alternativet, for når jeg køre den gamle program kode feks 3 x som står #22, så får jeg disse svar:
1)
https://cdn.restpack.io/a/cache/screenshot/62f6a6c9818718c43dc34acf3595403a79810b14
2)
https://cdn.restpack.io/a/cache/screenshot/62f6a6c9818718c43dc34acf3595403a79810b14
3)
https://cdn.restpack.io/a/cache/screenshot/62f6a6c9818718c43dc34acf3595403a79810b14
og hvis jeg tilføjer
. '?v=' . md5(microtime(true)), fra #23 så får jeg en blank mail uden noget link som i de 3 ovenstående...
Avatar billede fimo Seniormester
20. april 2018 - 19:32 #25
skal der bruges mere info fra mig eller er det bare en af de ting som ikke lade sig gøre alligevel?
men tak for alle forslag, forsøg....
Avatar billede Slater Ekspert
20. april 2018 - 20:29 #26
Hov, undskyld. Jeg huskede det som om du havde fundet en løsning. Det beklager jeg sgu, det var virkelig ikke bare for at ignorere dig.

Jeg er ikke hjemme over weekenden, men jeg sætter lige en reminder til mandag. God weekend.
Avatar billede fimo Seniormester
20. april 2018 - 21:33 #27
perfekt ja håber vi kan finde en løsning, god weekend til dig
Avatar billede fimo Seniormester
06. august 2018 - 17:41 #28
Hej igen, ville lige høre om lidt mere hjælp nu har jeg flyttet mit websted og på det nye sted findes noget som hedder Cpanel hvor der findes noget indbygget cronjob via php,så tænkte at måske det var her jeg kunne via noget php kode hente noget data fra en webside, kan se inde i cpanel kan jeg vælge tider jeg vil have php koden kørt men ved bare ikke noget om kodning eller hvad jeg skal skrive inde i det der cpanel.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester