Jumat, 04 Agustus 2017

Membuat Autolike Facebook Dengan Python


Sedikit-sedikit minta jempol, kalau menghilang bakal diancam unfriend. Begitulah nasib menjadi jempoler sejati. Sungguh, begitu keras cobaannya. :v

Selama ini, kita harus membutuhkan pihak ketiga untuk dapat dengan mudahnya mengklik like status orang secara otomatis. Akan tetapi, sebuah ancaman besar tersembunyi di dalamnya. Bagaimanapun sistem autolike sama sekali tidak mengantongi izin dari pihak Facebook. Perlu diingat jug bahwa setiap pihak tersebut memerlukan email dan password anda untuk dapat menjalankan scriptnya.

Sama saja, kita memberikan akun kita secara cuma-cuma. Kalaupun selama beberapa hari akan aman, apakah anda yakin selamanya demikian? Coba pikir lagi! Jika seorang teman tahu ini, ia bisa saja memanfaatkan keadaan. Pihak ketiga yang tak bertanggung jawab berpeluang memberikan data login anda dengan tebusan uang kepada teman anda.

Tidak ingin kan, hal seperti itu terjadi?
Maka dari itu, saya mencoba berinisiatif melakukan eksperimen dalam menciptakan program autolike sederhana dengan python.

Kasarnya, semua aktivitas browsing kita akan dikerjakan melalui HTTP request, bisa dalam bentuk metode POST atau GET. Sama halnya dengan saat login FB dan me-like salah satu status teman.

Login
utolike akan lebih mudah diimplementasikan dengan akses FB mobile daripada desktop. Pada lingkungan mobile, proses login tersebut terjadi pada https://m.facebook.com/login.php dengan metode POST yang berisi data login dan kode rahasia facebook. Untuk memperoleh kode rahasia ini, kita harus membuka halaman login facebook di home page (dalam keadaan belum login).

Setelah itu, data login dikombinasikan bersama kode rahasia untuk dikirim dalam proses login. Singkatnya, proses ini dilakukan sebagai berikut:
- GET https://m.facebook.com
- Simpan kode rahasia
- Tambahkan kode rahasia dengan data login berupa email + password
- POST kombinasi ke https://m.facebook.com/login.php

Semua HTTP request ini akan mudah dilakukan dengan menginstall library BeautifulSoup 4 (bs4).

print("Logging in...")
loginpage = ""session = requests.session()
headers = requests.utils.default_headers()
headers.update({'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20120101 Firefox/33.0'})
loginpage = session.get("https://m.facebook.com/").content
soup = BeautifulSoup(loginpage,"html.parser")

logindata = {}
for i in soup.select('#login_form input'):
    nam = i.get('name')
    val = i.get('value')
    logindata[nam] = val;

logindata['email'] = email
logindata['pass'] = password
respon = session.post('https://m.facebook.com/login.php',data = logindata);

if(str(respon.url).find('m.facebook.com/home.php') == -1):
    print ('Login error! Please try again.')
    exit(0)
print ('Login OK')

Autolike
Semua tombol like di facebook memiliki kode HTML anchor ( <a> ) dengan atribut href berawalan /a/like.php. Setiap saat kita mengklik link tersebut, yang terjadi adalah browser melakukan request GET ke link tersebut. Saat semua link telah diklik, biasanya kita akan melihat status lain dengan mengklik Load More Stories/Lihat Berita Lain. Link dari tombol tersebut bisa dicari dengan melakukan scan link anchor. Apabila terkandung  __m_log_async dan /stories.php maka itulah yang harus diproses.

NB : Sayangnya, bagian ini sering kali berubah. Sehingga harus sering-sering pantau kandungan HTML laman facebook melalui fitur inspect element pada web browser.

maxliked = int(input("Enter maximum number of post to like : "))
print("Maximum like has been set to " + str(maxliked))
while (maxliked > 0):
    page = respon.content
    soup = BeautifulSoup(page,"html.parser")
    for a in soup.select('a'):
        href = a.get('href')
        if (href.find('/a/like.php') == 0):
            session.get('https://m.facebook.com' + href)
            maxliked = maxliked - 1            print("Liked a post (" + str(maxliked) + " Remaining)" )
        if (href.find('__m_log_async') != -1) and (href.find('/stories.php') != -1) and (href.find('tab=h_nor') != -1):
            nextlink = href
            #print(nextlink)    print("Reloading...")
    respon = session.get('https://m.facebook.com' + nextlink);
print("Task OK");


Full Code
Langsung saja, bagiyang ingin icipp-icip, comot saja kodenya...

import requests
from bs4 import BeautifulSoup


print("Komputoo's DIY autoliker")
print("Copyright (c) 2017 By Irvan")
print("Please enter login informations below (Don't worry, we promise to never mess with it.)")
email = input("Enter email : ")
password = input("Enter password : ")

print("Logging in...")
loginpage = ""session = requests.session()
headers = requests.utils.default_headers()
headers.update({'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20120101 Firefox/33.0'})
loginpage = session.get("https://m.facebook.com/").content
soup = BeautifulSoup(loginpage,"html.parser")

logindata = {}
for i in soup.select('#login_form input'):
    nam = i.get('name')
    val = i.get('value')
    logindata[nam] = val;

logindata['email'] = email
logindata['pass'] = password
respon = session.post('https://m.facebook.com/login.php',data = logindata);

if(str(respon.url).find('m.facebook.com/home.php') == -1):
    print ('Login error! Please try again.')
    exit(0)
print ('Login OK')
 
maxliked = int(input("Enter maximum number of post to like : "))
print("Maximum like has been set to " + str(maxliked))
while (maxliked > 0):
    page = respon.content
    soup = BeautifulSoup(page,"html.parser")
    for a in soup.select('a'):
        href = a.get('href')
        if (href.find('/a/like.php') == 0):
            session.get('https://m.facebook.com' + href)
            maxliked = maxliked - 1            print("Liked a post (" + str(maxliked) + " Remaining)" )
        if (href.find('__m_log_async') != -1) and (href.find('/stories.php') != -1) and (href.find('tab=h_nor') != -1):
            nextlink = href
            #print(nextlink)    print("Reloading...")
    respon = session.get('https://m.facebook.com' + nextlink);
print("Task OK");

Selamat mencoba :)
Load disqus comments

0 comments