Membuat notifikasi packtub free

Kalau kamu sama seperti saya dan beberapa orang yang suka memanfaatkan packtub free ebook yang mana packtub akan membagikan 1 ebook setiap hari, maka kemungkinan kamu mengalami apa yang saya rasakan, dimana mesti buka tiap hari kalau gak mau kelewatan ebook keren yang di gratisin.

Packtub tidak menyediakan notifikasi untuk ebook yang di jadiin gratis setiap hari nya, ada sih di twitter packtub tapi gak tiap hari dan biasanya tercampur dengan tweet dari packtub sendiri. Saya juga sudah mencoba subscribe newsletter packtub, tapi kadang sehari bisa dapet lebih dari 1 email dan isi nya promo semua, tidak ada informasi tentang ebook yang lagi di gratiskan. Saya tidak tahu apakah saya yang miss-information sehingga tidak mengetahui ebook yang di gratiskan tiap hari nya, jadi yang saya lakukan adalah tiap pagi ngebuka website free packtub.

Yang gak enak adalah ketika kamu lupa atau kelewatan beberapa hari gak ngecek, eh taunya ada ebook yang keren atau yang lagi kamu perluin. Giliran ngecek tiap hari ebook nya gak begitu relevan dengan kerjaan kamu. Oleh karena itu iseng weekend lalu mencoba membuat automation yang akan ngecek ebook yang lagi di gratis dan mengirimkan notifikasi via email ke email saya.

Menggunakan PHP dan beberapa library dari packagist membuat hal ini menjadi lebih mudah. Saya menggunakan 3 dependency berikut

  • dotenv untuk kebutuhan konfigurasi (akun email, dll) agar lebih teroganisir.
  • goutte ini yang paling penting, library ini membantu mempermudah melakukan scrapping web.
  • mail ini untuk keperluan mengirim email.

Full project ada di github.

Core aplikasi ada di di app/packtub-free.php

Seperti yang bisa kamu lihat, terdapat 3 bagian utama pada kode tersebut.

Load dependensi dan config (.env)

Pertama, seperti biasa load dependensi bisa di lakuin dengan meng-include autoload.php dari composer. Lalu saya meload env.php yang isinya adalah membaca konfigurasi pada file .env yang terletak di root aplikasi.

include __DIR__ . "/../vendor/autoload.php";
include "env.php"; // load .env configuration

use josegonzalez\Dotenv\Loader;

$env = new Loader( __DIR__ . "/../.env" );
$env->parse()
    ->putenv( TRUE );

Melakukan scrapping

Scrapping website cukup mudah dengan menggunakan library goutte, seperti kamu bisa lihat, kita bisa menggunakan selector ala CSS untuk memilih element mana yang ingin kita ambil konten nya termasuk attribut element nya. dalam hal ini “.dotd-title h2” untuk mengambil judul buku nya, dan “.dotd-main-book-image a img” untuk mengambil cover buku nya.

/* do the scrapping */
$client      = new Client();
$url         = "https://www.packtpub.com/packt/offers/free-learning";
$data        = $client->request( 'GET', $url );
$ebook_title = $data->filter( ".dotd-title h2" )->first()->text();
$ebook_image = $data->filter( ".dotd-main-book-image a img" )->first()->attr( "src" );

Mengirim Email

Untuk pengiriman email saya menggunakan nette/mail. Saya menggunakan getenv() untuk mengambil akun email mana yang digunakan untuk mengirim dan menerima email. Lalu ada setingan subject email menggunakan judul ebook nya dan konten nya menggunakan thumbnail dari kover ebook.

/* compose email */
$mail = new Message;
$mail->setFrom( getenv( "SERVER_EMAIL" ) )
     ->addTo( getenv( "YOUR_EMAIL" ) )
     ->setSubject( "[packtub] " . $ebook_title )
     ->setHTMLBody(
         "Hi, download this new free book for today. <br> <h2>" . $ebook_title . "</h2> <br> <img src='http:" . $ebook_image . "'> <br> <a href='" . $url . "'>Claim now</a>"
     );

/* send email */
$mailer = new SendmailMailer;
$mailer->send( $mail );

Menambahkan ke crontab

Supaya kode ini bisa jalan setiap hari secara otomatis, saya tambahkan ke cron server saya. Saya setting supaya mengirim email ke saya setiap jam 9 pagi (wita) tepat ketika saya akan mulai kerja dan packtub baru ganti ebook yang dijadiin gratisan di hari itu.

0 9 * * * /usr/bin/php /path/to/app/packtub-free.php

*ps: sesuaikan path nya

Setting .env

Jangan lupa, setting .env sesuai dengan email mu, buka file .env.sample, ubah sesuai kebutuhanmu, lalu rename menjadi .env saja (tanpa .sample).

Cukup sederhana, dan saya gak pernah kelewatan ebook keren lagi 😉

2 Balasan untuk “Membuat notifikasi packtub free”

  1. muncul error>> cURL error 60: SSL certificate problem: unable to get local issuer certificate

    sering muncul masalah gini kalau targetnya https. Gimana ya cara mengatasinya?

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *