$ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_PROXY,'alamat.proxyisa.nya'); curl_setopt($ch, CURLOPT_PROXYPORT,'8080'); curl_setopt( $ch, CURLOPT_PROXYAUTH, CURLAUTH_NTLM ); curl_setopt ($ch, CURLOPT_PROXYUSERPWD, 'username:password'); $content = curl_exec($ch); curl_close($ch);
Rabu, 16 Februari 2011
cURL di PHP melalui proxy ISA server
Label:
php
Selasa, 15 Februari 2011
Kuasai Regex
Steven Haryanto
Bagian: 1—Pengenalan dan Karakter Meta Sederhana
Tingkat: Dasar
Tujuan: Setelah membaca bagian pertama ini, pembaca diharapkan
memahami beberapa metakarakter regex sederhana: dot, set karakter, lternasi, jangkar, shortcut quantifier +, *, ?, serta pengelompokan.
Abstrak: Apa itu regular expression (regex), mengapa regex perlu, beberapa contoh awal.
Prasyarat: Kenal dgn salah satu bahasa pemrograman Perl, PHP, atau Python. Ini tdk wajib, tapi akan membantu dlm memahami contoh-contoh.
Kuis berhadiah BMW portal Astaganaga.com hari ini ditutup dan akan diundi dua minggu lagi. Ternyata jumlah formulir yg disubmit mencapai lebih dari 40 ribu!
Sukses
besar. Kebetulan, karena Anda seorang programer PHP yg telah mengerti tentang SQL dan RDBMS (meskipun hanya MySQL), data tiap
formulir online sudah masuk semua dgn rapi ke database. dgn bangga Anda membuka browser dan mengakses URL phpMyAdmin dan
bermaksud melihat-lihat data yg telah terkumpul.
Nama propinsi kebetulan seragam semua, karena Anda telah membuat field isian berupa kotak select, sehingga pengisi formulir tinggal memilih dari daftar propinsi yg disediakan. Tapi, wah, ternyata nama kota cukup bervariasi karena di formulir berupa kotak isian. Banyak sekali terjadi salah ketik: “Jakrta”, “Seamrng.” Ada yg menulis dgn singkatan “DKI” atau “Bdg.” Ada pula yg berbaik hati menuliskan lengkapnya, “Jakarta Barat” atau malah “Kotamadya Bogor.” Dan ternyata Anda lupa melakukan pengecekan kode pos, sehingga ada sebagian yg salah, atau mungkin iseng, mengisi dgn huruf “tidak ada” atau “-” atau deretan huruf tertentu. Belum lagi alamat
jalan, bervariasi sekali.
Repotnya, sang bos ternyata meminta data ini dirapikan sebaik-baiknya, karena akan disusun menjadi database alamat yg mungkin bisa berguna di kemudian hari. Untuk mengirim penawaran via pos—alias junk mail—misalnya, atau malah daftar ini untuk dijual ke perusahaan lain. Dan karena Anda yg menyusun databasenya, Anda pulalah yg ketiban tugas merapikannya.
Bos jg minta penulisan alamat sestandar mungkin. Semua dijadikan huruf besar. prefiks “Jalan” harus disingkat menjadi “Jl.” Gang menjadi Gg. Dan sudah pasti nama-nama kota harus dibetulkan. Salah Anda sendiri sebetulnya, kenapa tdk menyediakan daftar kota dari database. Tapi kesalahan selalu bisa terjadi toh.
Solusi Non-Regex
Oke, tugas pertama mengkonversi ke huruf kapital cukup
mudah. Anda programer PHP, jadi Anda tinggal menggunakan fungsi builtin strupper().
Sampai
di sini alamat telah berubah menjadi string berhuruf besar semua. Hei, sebentar dulu. Ternyata ada alamat yg diawali spasi. Berarti, Anda perlu menghilangkan
dulu semua spasi di awal. Untungnya di PHP tersedia fungsi ltrim().
Wah,
ternyata Anda menyadari banyak jg yg mengetik spasi ganda bahkan tiga empat kali. Kok bisa ya? Bagaimana cara membetulkannya?
Kode
di atas mengubah string ganda (dua buah spasi) menjadi satu spasi terus-menerus
hingga sudah tdk ada lagi string ganda.
Tugas
berikutnya menyingkat Jalan dan Gang. Sekali lagi, karena Anda programer PHP,
Anda tinggal menggunakan fungsi string yg telah disediakan, str_replace().
Mudah
ya? Satu lagi:
Hm, tapi ternyata ada jalan di Jakarta bernama
Ganggeng. Seorang Ibu Anwar misalnya, tinggal di
“Jalan Ganggeng 15.” Tentu saja tdk boleh diubah
menjadi Gg.geng bukan? Bagaimana solusinya? Kita hanya boleh mengubah “Gang” yg berada di awal string.
Untuk mengetahui posisi string dlm string lain, gunakan fungsi strpos(). Jika fungsi ini
mengembalikan nilai 0, maka string yg dicari ada di awal.
Ternyata
belum benar. Ada seorang Bapak yg beralamat di “Jalan Kehakiman, Gang Haji Umar
no. 14.” Uji yg tepat sebetulnya adalah mencari kata
“Gang” yg berdiri sendiri, bukan bagian dari sebuah kata. Bagaimana caranya?
Kode
di atas pertama-tama mencari potongan “GANG”. Jika ditemukan, maka dilakukan
pengujian sekali lagi apakah satu karakter di kiri dan di kanan “GANG” bukan
sebuah huruf. Jika benar, maka barulah dilakukan penggantian.
Ternyata
derita Anda belum berakhir sampai di sini. Entah mengapa, banyak sekali yg
mengeja “Gang” dgn “Gank” dan “Geng”. Terpaksa menambahkan potongan-potongan kode lagi ke kondisi pengujian sebelumnya. Belum lagi Anda masih harus membetulkan nama kota dan kode pos. Semakin banyak saja Anda harus memotong-motong dan menggabungkan
string, mencari string di string lain, melakukan loop, pengujian, dsb. Duh,
merepotkan! Lama-lama Anda jadi mempertimbangkan untuk
mengedit langsung saja semua data tersebut secara manual.
Contoh kasus di atas hanyalah secuil dari tugas mengolah teks.
Tugas lainnya kadang jauh lebih kompleks. Mengerikan. Apakah mengolah teks
harus bertele-tele dan merepotkan seperti contoh di atas?
Kenalkan,
Regex
Jawabnya,
untung saja, tdk. Ada sebuah bahasa mini yg disebut regular expression (regex) yg akan Anda pelajari sesaat lagi. Regex adalah sebuah fasilitas yg
ampuh, yg memungkinkan Anda mengolah teks secara jauh lebih ringkas, tdk
bertele-tele. Tanpa regex, rasanya pengolahan teks tingkat lanjut itu tdk terbayangkan repotnya. Bahkan, jika Anda buta regex, maka kemampuan mengolah teks Anda akan terus berada di tingkat taman kanak-kanak. dgn menguasai regex, Anda akan memandang teks dlm kacamata yg baru. Anda akan lebih lihai dan lancar dlm memainkan huruf dan angka,
potongan dan kata, baris dan paragraf teks. Anda tdk akan
takut lagi menghadapi data yg menyimpang atau aneh-aneh. Anda akan terlatih menemukan pola dari ketidakteraturan. Pendek
kata, sekali mengenal regex—bolehlah penulis sedikit berlebihan di sini—hidup
Anda tdk akan sama lagi!
Pengetahuan regex jg amat berguna, karena dipakai di mana-mana.
Bukan hanya di Perl, yg amat intensif menggunakan regex, tapi jg di bahasa
pemrograman lain mulai dari Python hingga Java, dari Javascript hingga VB.
Bukan hanya di Unix dgn utilitas-utilitas grep dan awk-nya, tapi jg di
Windows dan OS lain dlm berbagai program. Misalnya akan Anda jumpai di editor
teks (seperti vi dan joe), di file konfigurasi berbagai daemon dan utilitas
(seperti procmail, exim, dan Apache), bahkan di aplikasi seperti Microsoft Word
dan Borland Delphi regex pun tak luput dikenali. Intinya, pengetahuan regex
Anda akan sangat portabel dan terpakai.
Wildcard
Anda
yg pernah memakai DOS atau Linux tentunya familiar dgn wildcard—atau
globbing jika di Unix. Wildcard adalah sebuah string pola yg dpt digunakan
untuk dicocokkan dgn sekumpulan nama file dan direktori. Misalnya: *.exe akan cocok dgn semua file
berekstensi .exe. Karakter
khusus wildcard ‘*’ di sini
berarti cocok dgn deretan satu atau lebih karakter apa saja. Contoh lain, ???.txt akan cocok dgn tiap file .txt yg namanya terdiri dari tiga huruf.
Latihan
1
Jawaban
ada di akhir tulisan.
Wildcard bisa dibilang bentuk primitif mirip regex. Namun regex jauh lebih ampuh dan
ekspresif daripada wildcard, dpt menyatakan pola-pola yg lebih kompleks.
Pemilihan,
Pengelompokan, Set, dan Opsional
Sama
seperti wildcard, regex pun adalah sebuah string pola. Pola yg akan
dicocokkan oleh komputer dari kiri ke kanan. Pola regex “satu” misalnya, cocok
dgn string “satu” dan tdk dgn string “dua”. tdk ada bedanya dgn
operasi pembandingan string biasa bukan?
Beberapa
karakter dlm sebuah pola regex akan diartikan secara khusus.
Karakter-karakter ini disebut karakter meta (alias, bukan yg
sesungguhnya). Ini sama seperti karakter *
dan ? di wildcard yg bukan
diartikan sebagai karakter literal bintang dan tanda tanya itu sendiri,
melainkan berarti khusus. Demikian jg karakter-karakter meta.
Jika
wildcard di DOS hanya mengenal dua karakter meta, ? dan *, dan
itu pun tdk fleksibel, maka dlm bahasa regex standar umumnya dikenal
beberapa jenis karakter meta lain. Berikut ini beberapa karakter meta dasar.
Kasus
2: Berbagai Cara Mengeja Nama
Punya
nama yg, ehem, keren belum tentu sepenuhnya berkah. Banyak jg yg salah
mengeja nama saya. “Steven” kadang-kadang ditulis orang “stephen”, kadang jg
“stefen”—meski lebih jarang. Bagaimana mencari semua kemungkinan orang menulis
nama itu?
Tapi,
ada jg ternyata yg menulis “stefan”. Jika kita kombinasikan semua
kemungkinan, maka kini ada 3×2 variasi. Lalu pernah jg ada dokter yg
menulis nama saya “stefanus” atau “stevanus” di kartu pasiennya. Nama belakang
“haryanto” saya pun pernah ditulis “harijanto”, “hariyanto”, atau “herjanto”.
Berarti ada puluhan kombinasi sekarang. Apakah kita harus terus-menerus
memperpanjang perbandingan dgn sekian belas fungsi strpos() dan operator or? Tentu tdk, kan sudah ada regex.
Wuih,
tunggu dulu. Regex seperti itu? Mengerikan jg. Tenanglah. Regex itu harus
dipandang sebagai teman. Notasinya memang ringkas sekali, tapi keringkasan
justru menjadi salah satu keunggulan regex. Jika mata Anda sudah terbiasa,
semoga akan bisa lebih cepat dan mudah memahami sebuah pola regex. Pola di atas
tadi terdiri dari beberapa karakter meta. Kita bahas satu-persatu.
Pemilihan
|
disebut jg alternasi atau pemilihan. dpt dibaca sebagai “atau”. Gunanya
untuk memilih satu dari dua atau lebih alternatif yg kita sediakan. Beberapa
contoh:
Pengelompokan
( dan )
berguna untuk mengelompokkan, persis seperti tanda kurung dlm operasi
matematika. Umumnya dipakai bersama karakter meta lain. Contoh:
Set karakter
[ dan ]
mengapit sebuah set karakter. Pada dasarnya berguna untuk memberi pilihan jg,
sama seperti |, namun memiliki
perbedaan pilihannya berupa huruf dan memiliki sintaks rentang dan negasi.
Sintaks rentang adalah [m-n] dan
akan cocok dgn karakter mulai dari m hingga n. Sintaks negasi
adalah [^m] dan akan cocok
dgn semua karakter kecuali m. Berikut beberapa contoh set.
Opsional
Arti
? di regex berbeda dgn di
wildcard. Di regex, ? berarti
huruf atau kelompok di kiri bersifat opsional. dpt jg dibaca sebagai “boleh
ada atau boleh tdk.” Beberapa contoh:
diikuti huruf n; boleh diikuti ‘us’, tapi boleh jg tdk. Diikuti
spasi dan deret tiga huruf har; boleh diikuti huruf i, dpt jg
langsung diikuti salah satu dari huruf j atau y. Terakhir, diikuti oleh deret
4 huruf anto.” krn ringkas, seluruh kalimat keinginan kita tadi
dpt dinyatakan hanya dgn satu pola regex! dgn regex, kita dpt
mempersingkat mgkn puluhan baris if-or menjadi hanya satu baris kode PHP:
Pada
dasarnya regex bisa menyingkat 100 atau lbh baris kode menjadi hny satu
pola. Singkat berarti lebih cepat ditulis, lbh mudah dikopi-paste, lebih
sedikit kemungkinan salah. Regex jg lbh gampang dibuat ketimbang kode yg
sepadan.
Perhatikan
bahwa pola regex kita dlm kode PHP di atas diapit oleh dua garis miring.
Kegunaan pengapit ini dan lebih jauh mengenai fungsi preg_match() akan dibahas nanti. dlm
Perl, sintaksnya seperti ini:
krn regex begitu terintegrasi dgn Perl, maka Perl memiliki bbrp operator
khusus untuk regex. Pengapit //
disebut operator m//. Terdapat
pula satu operator pengutip literal regex lain yaitu qr//. Pola regex dlm Perl tdk perlu
diapit lagi dgn kutip string, cukup dgn salah satu pengutip regex tadi (m// atau qr//).
Untuk melakukan perbandingan regex, digunakan operator =~.
Sementara
di PHP pekerjaan yg berkaitan dgn regex dilakukan melalui fungsi-fungsi preg_*().
Latihan
2
Titik,
Nol-Atau-Lebih, Satu-Atau-Lebih, Jangkar
Berikut ini empat lagi karakter meta dasar lain.
Titik
Titik
atau dot adlh lambang yg cocok dgn smua karakter tunggal. Bbrp
contoh:
Nol-Atau-Lebih,
Satu-Atau-Lebih
Kalau
tanda optional ? bisa dibilang
sebagai “nol-atau-satu”, maka *
melambangkan “nol-atau-lebih” dan +
melambangkan “satu-atau-lebih” dari karakter/kelompok yg berada tepat di kiri tanda tersebut. Bbrp contoh:
Jangkar
^ dan $
masing-masing dpt disebut sebagai “harus di awal” dan “harus di akhir.”
Mengapa disebut jangkar? Kedua karakter ini tdk melambangkan karakter mereka sendiri, ingat, keduanya adlh karakter meta. Bahkan ^ dan $
di sini tdk melambangkan karakter apapun, melainkan mensyaratkan posisi
atau penambatan pola ke string yg ingin dicocokkan. Itulah sebabnya
pasangan karakter meta ini disebut anchor, atau jangkar. Bbrp contoh:
Pola
seperti [0-9][0-9] dan pola-pola
lain di contoh sebelumnya bersifat tdk terjangkar krn tdk diberi ^ maupun $.
Jadi di mana pun pola tersebut ditemukan di dlm string—di awal, tengah,
maupun ujung akhir—tetap akan cocok. Sementara jika sebuah pola terjangkar,
maka hanya cocok di awal atau di akhir atau awal-dan-akhir, bergantung pada
jenis jangkar yg diberikan pada pola.
Latihan 3
Sampai di sini dulu. Sampai jumpa di bagian berikutnya.
Jawaban Latihan
Latihan1
Latihan
2
Latihan
3
Bilangan bulat positif: [0-9]+.
Bulangan bulat negatif: -[0-9]+.
Sebuah bilangan positif jg dpt diberi tanda positif di depan angkanya.
krn + adlh sebuah karakter
meta, maka kita dpt memasukkannya ke dlm set atau mengawalinya dgn \ (garis miring terbalik, backslash) untuk
membuatnya menjadi bermakna literal. Contoh: [+]?[0-9]+
atau \+?[0-9]+.
Kedua
pola di atas dpt digabung menjadi pola untuk “bilangan bulat”: [+-]?[0-9]+.
Bilangan
desimal adlh bilangan bulat yg diikuti koma desimal. Polanya adlh sebagai
berikut: [+-]?[0-9]+(,[0-9]+)?
Atau bisa jg ditulis tanpa pengelompokan dgn pola ini: [+-]?[0-9]+,?[0-9]*. Perhatikan bahwa koma desimal bersifat opsional.
aku
^aku$
aku$
Sebuah variabel dlm PHP diawali dgn karakter $
dan diikuti dgn huruf besar, huruf kecil, atau garis bawah (_) namun tdk boleh angka. Huruf kedua dan seterusnya dpt berupa huruf, garis bawah, atau angka. Sebuah variabel
dpt terdiri dari satu atau lebih karakter. Polanya adlh sebagai berikut: $[A-Za-z_][A-Za-z_0-9]*
Perhatikan bahwa karakter $ di awal pola bukanlah karakter meta. Karakter meta memiliki arti khusus hanya
dlm konteks khusus aja. Jika karakter $
tdk ditaruh di akhir pola, maka tdk berarti jangkar, melainkan karakter
literal biasa.
tdk. krn pola berjangkar, maka potongan Mega atau Rahma harus terdapat di awal string yg ingin dicocokkan. dlm kasus ini, tdk cocok
krn awal string adlh Ibu.
Ya. Tepatnya, cocok dgn lapuk. Sekali lagi, perhatikan karakter meta bergantung pada konteks. Di dlm [ ] kebanyakan karakter meta menjadi bermakna literal. dlm kasus kita, karakter
meta ^ jika di awal pola berarti jangkar, namun di awal set berarti negasi. Maka pola [^k]apuk bertugas mencari potongan string
yg bukan diawali huruf k kecil dan diikuti apuk. Potongan
string lapuk cocok dgn pola ini.
Bagian: 1—Pengenalan dan Karakter Meta Sederhana
Tingkat: Dasar
Tujuan: Setelah membaca bagian pertama ini, pembaca diharapkan
memahami beberapa metakarakter regex sederhana: dot, set karakter, lternasi, jangkar, shortcut quantifier +, *, ?, serta pengelompokan.
Abstrak: Apa itu regular expression (regex), mengapa regex perlu, beberapa contoh awal.
Prasyarat: Kenal dgn salah satu bahasa pemrograman Perl, PHP, atau Python. Ini tdk wajib, tapi akan membantu dlm memahami contoh-contoh.
Kuis berhadiah BMW portal Astaganaga.com hari ini ditutup dan akan diundi dua minggu lagi. Ternyata jumlah formulir yg disubmit mencapai lebih dari 40 ribu!
Sukses
besar. Kebetulan, karena Anda seorang programer PHP yg telah mengerti tentang SQL dan RDBMS (meskipun hanya MySQL), data tiap
formulir online sudah masuk semua dgn rapi ke database. dgn bangga Anda membuka browser dan mengakses URL phpMyAdmin dan
bermaksud melihat-lihat data yg telah terkumpul.
Nama propinsi kebetulan seragam semua, karena Anda telah membuat field isian berupa kotak select, sehingga pengisi formulir tinggal memilih dari daftar propinsi yg disediakan. Tapi, wah, ternyata nama kota cukup bervariasi karena di formulir berupa kotak isian. Banyak sekali terjadi salah ketik: “Jakrta”, “Seamrng.” Ada yg menulis dgn singkatan “DKI” atau “Bdg.” Ada pula yg berbaik hati menuliskan lengkapnya, “Jakarta Barat” atau malah “Kotamadya Bogor.” Dan ternyata Anda lupa melakukan pengecekan kode pos, sehingga ada sebagian yg salah, atau mungkin iseng, mengisi dgn huruf “tidak ada” atau “-” atau deretan huruf tertentu. Belum lagi alamat
jalan, bervariasi sekali.
Repotnya, sang bos ternyata meminta data ini dirapikan sebaik-baiknya, karena akan disusun menjadi database alamat yg mungkin bisa berguna di kemudian hari. Untuk mengirim penawaran via pos—alias junk mail—misalnya, atau malah daftar ini untuk dijual ke perusahaan lain. Dan karena Anda yg menyusun databasenya, Anda pulalah yg ketiban tugas merapikannya.
Bos jg minta penulisan alamat sestandar mungkin. Semua dijadikan huruf besar. prefiks “Jalan” harus disingkat menjadi “Jl.” Gang menjadi Gg. Dan sudah pasti nama-nama kota harus dibetulkan. Salah Anda sendiri sebetulnya, kenapa tdk menyediakan daftar kota dari database. Tapi kesalahan selalu bisa terjadi toh.
Solusi Non-Regex
Oke, tugas pertama mengkonversi ke huruf kapital cukup
mudah. Anda programer PHP, jadi Anda tinggal menggunakan fungsi builtin strupper().
PHP Code:
# Langkah 1
$alamat=strupper($alamat);
di sini alamat telah berubah menjadi string berhuruf besar semua. Hei, sebentar dulu. Ternyata ada alamat yg diawali spasi. Berarti, Anda perlu menghilangkan
dulu semua spasi di awal. Untungnya di PHP tersedia fungsi ltrim().
PHP Code:
# Langkah 0
$alamat=ltrim($alamat);
ternyata Anda menyadari banyak jg yg mengetik spasi ganda bahkan tiga empat kali. Kok bisa ya? Bagaimana cara membetulkannya?
PHP Code:
# Langkah 0.2
while (1) {
$alamat2=str_replace(" ", " ", $alamat);
if ($alamat2 == $alamat)
break;
else
$alamat=$alamat2;
}
di atas mengubah string ganda (dua buah spasi) menjadi satu spasi terus-menerus
hingga sudah tdk ada lagi string ganda.
Tugas
berikutnya menyingkat Jalan dan Gang. Sekali lagi, karena Anda programer PHP,
Anda tinggal menggunakan fungsi string yg telah disediakan, str_replace().
PHP Code:
# Langkah 2.1
$alamat=str_replace("JALAN", "JL.", $alamat);
ya? Satu lagi:
PHP Code:
# Langkah 2.2
$alamat=str_replace("GANG", "GG.", $alamat);
Ganggeng. Seorang Ibu Anwar misalnya, tinggal di
“Jalan Ganggeng 15.” Tentu saja tdk boleh diubah
menjadi Gg.geng bukan? Bagaimana solusinya? Kita hanya boleh mengubah “Gang” yg berada di awal string.
Untuk mengetahui posisi string dlm string lain, gunakan fungsi strpos(). Jika fungsi ini
mengembalikan nilai 0, maka string yg dicari ada di awal.
PHP Code:
# Langkah 2.2b
if (strpos($alamat, "GANG") === 0) {
$alamat=GG." . substr($alamat, 4);
}
belum benar. Ada seorang Bapak yg beralamat di “Jalan Kehakiman, Gang Haji Umar
no. 14.” Uji yg tepat sebetulnya adalah mencari kata
“Gang” yg berdiri sendiri, bukan bagian dari sebuah kata. Bagaimana caranya?
PHP Code:
# Langkah 2.2c
$ALFABET="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$ganti=false;
if (($pos=strpos($alamat, "GANG")) !== false) {
# kata "GANG" berdiri sendiri jika terdapat di awal atau di akhir
# string, atau dibatasi spasi atau tanda baca.
if ((($pos == 0) or
(strpos($ALFABET, substr($alamat, $pos-1, 1)) === false))
and
(($pos + 4 == strlen($alamat)) or
(strpos($ALFABET, substr($alamat, $pos+4, 1)) === false))
) $ganti=true;
}
if ($ganti)
$alamat=substr($alamat, 0, $pos) . "GG." .
substr($alamat, $pos+4);
di atas pertama-tama mencari potongan “GANG”. Jika ditemukan, maka dilakukan
pengujian sekali lagi apakah satu karakter di kiri dan di kanan “GANG” bukan
sebuah huruf. Jika benar, maka barulah dilakukan penggantian.
Ternyata
derita Anda belum berakhir sampai di sini. Entah mengapa, banyak sekali yg
mengeja “Gang” dgn “Gank” dan “Geng”. Terpaksa menambahkan potongan-potongan kode lagi ke kondisi pengujian sebelumnya. Belum lagi Anda masih harus membetulkan nama kota dan kode pos. Semakin banyak saja Anda harus memotong-motong dan menggabungkan
string, mencari string di string lain, melakukan loop, pengujian, dsb. Duh,
merepotkan! Lama-lama Anda jadi mempertimbangkan untuk
mengedit langsung saja semua data tersebut secara manual.
Contoh kasus di atas hanyalah secuil dari tugas mengolah teks.
Tugas lainnya kadang jauh lebih kompleks. Mengerikan. Apakah mengolah teks
harus bertele-tele dan merepotkan seperti contoh di atas?
Kenalkan,
Regex
Jawabnya,
untung saja, tdk. Ada sebuah bahasa mini yg disebut regular expression (regex) yg akan Anda pelajari sesaat lagi. Regex adalah sebuah fasilitas yg
ampuh, yg memungkinkan Anda mengolah teks secara jauh lebih ringkas, tdk
bertele-tele. Tanpa regex, rasanya pengolahan teks tingkat lanjut itu tdk terbayangkan repotnya. Bahkan, jika Anda buta regex, maka kemampuan mengolah teks Anda akan terus berada di tingkat taman kanak-kanak. dgn menguasai regex, Anda akan memandang teks dlm kacamata yg baru. Anda akan lebih lihai dan lancar dlm memainkan huruf dan angka,
potongan dan kata, baris dan paragraf teks. Anda tdk akan
takut lagi menghadapi data yg menyimpang atau aneh-aneh. Anda akan terlatih menemukan pola dari ketidakteraturan. Pendek
kata, sekali mengenal regex—bolehlah penulis sedikit berlebihan di sini—hidup
Anda tdk akan sama lagi!
Pengetahuan regex jg amat berguna, karena dipakai di mana-mana.
Bukan hanya di Perl, yg amat intensif menggunakan regex, tapi jg di bahasa
pemrograman lain mulai dari Python hingga Java, dari Javascript hingga VB.
Bukan hanya di Unix dgn utilitas-utilitas grep dan awk-nya, tapi jg di
Windows dan OS lain dlm berbagai program. Misalnya akan Anda jumpai di editor
teks (seperti vi dan joe), di file konfigurasi berbagai daemon dan utilitas
(seperti procmail, exim, dan Apache), bahkan di aplikasi seperti Microsoft Word
dan Borland Delphi regex pun tak luput dikenali. Intinya, pengetahuan regex
Anda akan sangat portabel dan terpakai.
Wildcard
Anda
yg pernah memakai DOS atau Linux tentunya familiar dgn wildcard—atau
globbing jika di Unix. Wildcard adalah sebuah string pola yg dpt digunakan
untuk dicocokkan dgn sekumpulan nama file dan direktori. Misalnya: *.exe akan cocok dgn semua file
berekstensi .exe. Karakter
khusus wildcard ‘*’ di sini
berarti cocok dgn deretan satu atau lebih karakter apa saja. Contoh lain, ???.txt akan cocok dgn tiap file .txt yg namanya terdiri dari tiga huruf.
Latihan
1
Jawaban
ada di akhir tulisan.
- Apa
wildcard dari “semua nama file berekstensi apa saja”? - Apa
wildcard dari “Semua file ZIP yg berawalan A, B, dan C”? - Apakah
akan F*.* cocok dgn nama
file FileSaya di DOS/Linux? Bagaimana dgn f*?
Wildcard bisa dibilang bentuk primitif mirip regex. Namun regex jauh lebih ampuh dan
ekspresif daripada wildcard, dpt menyatakan pola-pola yg lebih kompleks.
Pemilihan,
Pengelompokan, Set, dan Opsional
Sama
seperti wildcard, regex pun adalah sebuah string pola. Pola yg akan
dicocokkan oleh komputer dari kiri ke kanan. Pola regex “satu” misalnya, cocok
dgn string “satu” dan tdk dgn string “dua”. tdk ada bedanya dgn
operasi pembandingan string biasa bukan?
Beberapa
karakter dlm sebuah pola regex akan diartikan secara khusus.
Karakter-karakter ini disebut karakter meta (alias, bukan yg
sesungguhnya). Ini sama seperti karakter *
dan ? di wildcard yg bukan
diartikan sebagai karakter literal bintang dan tanda tanya itu sendiri,
melainkan berarti khusus. Demikian jg karakter-karakter meta.
Jika
wildcard di DOS hanya mengenal dua karakter meta, ? dan *, dan
itu pun tdk fleksibel, maka dlm bahasa regex standar umumnya dikenal
beberapa jenis karakter meta lain. Berikut ini beberapa karakter meta dasar.
- | (garis vertikal) untuk pemilihan;
- ( dan ) (kurung buka dan kurung tutup) untuk pengelompokan;
- [ dan ] (kurung siku buka dan tutup) untuk membuat set
karakter; - ? (tanda tanya) untuk mengartikan
opsional.
Kasus
2: Berbagai Cara Mengeja Nama
Punya
nama yg, ehem, keren belum tentu sepenuhnya berkah. Banyak jg yg salah
mengeja nama saya. “Steven” kadang-kadang ditulis orang “stephen”, kadang jg
“stefen”—meski lebih jarang. Bagaimana mencari semua kemungkinan orang menulis
nama itu?
PHP Code:
if (strpos($nama, "steven") !== false or
strpos($nama, "stephen") !== false or
strpos($nama, "stefen") !== false) {
# lakukan sesuatu di sini
}
ada jg ternyata yg menulis “stefan”. Jika kita kombinasikan semua
kemungkinan, maka kini ada 3×2 variasi. Lalu pernah jg ada dokter yg
menulis nama saya “stefanus” atau “stevanus” di kartu pasiennya. Nama belakang
“haryanto” saya pun pernah ditulis “harijanto”, “hariyanto”, atau “herjanto”.
Berarti ada puluhan kombinasi sekarang. Apakah kita harus terus-menerus
memperpanjang perbandingan dgn sekian belas fungsi strpos() dan operator or? Tentu tdk, kan sudah ada regex.
PHP Code:
ste(v|f|ph)[ea]n(us)? h[ae]ri?[jy]anto
tunggu dulu. Regex seperti itu? Mengerikan jg. Tenanglah. Regex itu harus
dipandang sebagai teman. Notasinya memang ringkas sekali, tapi keringkasan
justru menjadi salah satu keunggulan regex. Jika mata Anda sudah terbiasa,
semoga akan bisa lebih cepat dan mudah memahami sebuah pola regex. Pola di atas
tadi terdiri dari beberapa karakter meta. Kita bahas satu-persatu.
Pemilihan
|
disebut jg alternasi atau pemilihan. dpt dibaca sebagai “atau”. Gunanya
untuk memilih satu dari dua atau lebih alternatif yg kita sediakan. Beberapa
contoh:
- aku|kamu, cocok dgn aku
atau kamu, tapi tdk dgn dia; - apel|anggur|pisang, cocok dgn
salah satu dari apel, anggur, atau pisang, tapi tdk
dgn jambu karena itu tdk ada dlm daftar pilihan.
Pengelompokan
( dan )
berguna untuk mengelompokkan, persis seperti tanda kurung dlm operasi
matematika. Umumnya dipakai bersama karakter meta lain. Contoh:
- satria (baja hitam|pembela kebenaran)
akan cocok dgn “satria baja hitam” atau “satria pembela
kebenaran”. Regex ini berbunyi sebagai berikut: “deretan huruf
‘satria’ diikuti spasi dan diikuti ‘baja hitam’ atau ‘pembela
kebenaran’.
Set karakter
[ dan ]
mengapit sebuah set karakter. Pada dasarnya berguna untuk memberi pilihan jg,
sama seperti |, namun memiliki
perbedaan pilihannya berupa huruf dan memiliki sintaks rentang dan negasi.
Sintaks rentang adalah [m-n] dan
akan cocok dgn karakter mulai dari m hingga n. Sintaks negasi
adalah [^m] dan akan cocok
dgn semua karakter kecuali m. Berikut beberapa contoh set.
- bat[aoiu]k, cocok dgn batak,
batok, batik, atau batuk. - bat(a|i|o|u)k, sama dgn
sebelumnya, namun menggunakan |. - [0-9], cocok dgn angka 0 hingga 9.
- [A-EG-Z], cocok dgn semua huruf
besar kecuali F. - [0-9][0-9], cocok dgn `00’ hingga
‘99’ (100 kombinasi). - [012][0-9], cocok dgn ‘00’ hingga
‘29’ (30 kombinasi) - [012][0-9]|30, cocok dgn ‘00’
hingga ‘29’ atau ‘30’ (30 plus 1 kombinasi) - sem([ui]|bilan), cocok dgn semi,
semu, atau sembilan. tdk cocok dgn semibilan, semubilan,
maupun semuibilan.
Opsional
Arti
? di regex berbeda dgn di
wildcard. Di regex, ? berarti
huruf atau kelompok di kiri bersifat opsional. dpt jg dibaca sebagai “boleh
ada atau boleh tdk.” Beberapa contoh:
- silah?kan, cocok dgn silakan
atau silahkan. - (silah)?kan, cocok dgn silahkan
atau dgn kan saja. - advi([sc]es?|sory), cocok dgn advice,
advise, advices, advises, atau advisory. Regex
ini berbunyi “empat huruf advi diikuti dgn salah satu dari: a)
huruf s atau c yg diikuti e dan boleh diikuti s; atau b) deretan
huruf sory.”
diikuti huruf n; boleh diikuti ‘us’, tapi boleh jg tdk. Diikuti
spasi dan deret tiga huruf har; boleh diikuti huruf i, dpt jg
langsung diikuti salah satu dari huruf j atau y. Terakhir, diikuti oleh deret
4 huruf anto.” krn ringkas, seluruh kalimat keinginan kita tadi
dpt dinyatakan hanya dgn satu pola regex! dgn regex, kita dpt
mempersingkat mgkn puluhan baris if-or menjadi hanya satu baris kode PHP:
PHP Code:
if (preg_match("/ste(v|f|ph)[ea]n(us)? h[ae]ri?[jy]anto/", $nama)) { # lakukan sesuatu di sini }
dasarnya regex bisa menyingkat 100 atau lbh baris kode menjadi hny satu
pola. Singkat berarti lebih cepat ditulis, lbh mudah dikopi-paste, lebih
sedikit kemungkinan salah. Regex jg lbh gampang dibuat ketimbang kode yg
sepadan.
Perhatikan
bahwa pola regex kita dlm kode PHP di atas diapit oleh dua garis miring.
Kegunaan pengapit ini dan lebih jauh mengenai fungsi preg_match() akan dibahas nanti. dlm
Perl, sintaksnya seperti ini:
PHP Code:
if ($nama =~ /ste(v|f|ph)[ea]n(us)? h[ae]ri?[jy]anto/) {
# lakukan sesuatu di sini
}
khusus untuk regex. Pengapit //
disebut operator m//. Terdapat
pula satu operator pengutip literal regex lain yaitu qr//. Pola regex dlm Perl tdk perlu
diapit lagi dgn kutip string, cukup dgn salah satu pengutip regex tadi (m// atau qr//).
Untuk melakukan perbandingan regex, digunakan operator =~.
Sementara
di PHP pekerjaan yg berkaitan dgn regex dilakukan melalui fungsi-fungsi preg_*().
Latihan
2
- Seperti
apa regex yg berbunyi “satu hingga tiga deret karakter a baik huruf
besar maupun kecil”? - Bagaimana
mencocokkan karakter yg bukan huruf kecil? - Bagaimana
mencocokkan string angka ‘15’ hingga ‘51’ dgn regex? - Bagaimana
mencocokkan dgn tepat string-string anting, ranting, dan ranjang
dgn seringkas-ringkasnya? - Apakah
[AS][US][AS] cocok dgn USA? - Apakah
(Mega|Rahma)wati cocok
dgn Ibu Megawati? dgn Mega? - Apakah
Saya( bukan)? pembohong.
cocok dgn saya pembohong.?
Titik,
Nol-Atau-Lebih, Satu-Atau-Lebih, Jangkar
Berikut ini empat lagi karakter meta dasar lain.
- . (titik) cocok dgn satu karakter
apa pun; - (bintang)
untuk mengartikan “nol atau lebih”; - + (plus) untuk mengartikan “satu atau
lebih”; - ^ (tanda pangkat) dan $ (dolar) untuk penjangkaran.
Titik
Titik
atau dot adlh lambang yg cocok dgn smua karakter tunggal. Bbrp
contoh:
- bat.k cocok dgn batak, batok,
dan jg batbk, bat+k, bat8k, dsb. Namun tdk cocok
dgn batrak (krn tr adlh dua karakter) atau batk
(nol karakter). - bat.?k sama seperti sebelumnya, namun
cocok pula dgn batk (nol karakter) krn titik diikuti oleh
tanda opsional. - b...k cocok dgn lebih banyak lagi
string, mulai dari batak, buruk, bilik, dan semua
potongan string yg terdiri dari 5 karakter, diawali dgn b dan
diakhiri dgn k.
Nol-Atau-Lebih,
Satu-Atau-Lebih
Kalau
tanda optional ? bisa dibilang
sebagai “nol-atau-satu”, maka *
melambangkan “nol-atau-lebih” dan +
melambangkan “satu-atau-lebih” dari karakter/kelompok yg berada tepat di kiri tanda tersebut. Bbrp contoh:
- [0-9]+, cocok dgn deretan angka.
- .+, cocok dgn satu atau lebih
karakter apa pun, atau cocok dgn string yg “tidak kosong”. - .*, cocok dgn nol atau lebih
karakter apa pun, atau cocok dgn string apa aja, termasuk jg yg
kosong. - h?(ah|eh)+!*, berbunyi “boleh diawali
huruf h, terdiri dari deretan ah atau eh, dan boleh
diakhiri dgn deretan tanda seru.” Cocok dgn string seperti eh,
hahahah!, atau ehehahehah!!!. tdk cocok dgn string
seperti haha, hhah!, maupun h!.
Jangkar
^ dan $
masing-masing dpt disebut sebagai “harus di awal” dan “harus di akhir.”
Mengapa disebut jangkar? Kedua karakter ini tdk melambangkan karakter mereka sendiri, ingat, keduanya adlh karakter meta. Bahkan ^ dan $
di sini tdk melambangkan karakter apapun, melainkan mensyaratkan posisi
atau penambatan pola ke string yg ingin dicocokkan. Itulah sebabnya
pasangan karakter meta ini disebut anchor, atau jangkar. Bbrp contoh:
- 456 cocok dgn 456, 456789,
maupun 123456 krn ketiganya mengandung pola tersebut. - ^456 cocok dgn 456, 456789,
namun tdk cocok dgn 123456. - ^456$ hanya cocok dgn 456,
tdk dgn 456789 maupun 123456.
Pola
seperti [0-9][0-9] dan pola-pola
lain di contoh sebelumnya bersifat tdk terjangkar krn tdk diberi ^ maupun $.
Jadi di mana pun pola tersebut ditemukan di dlm string—di awal, tengah,
maupun ujung akhir—tetap akan cocok. Sementara jika sebuah pola terjangkar,
maka hanya cocok di awal atau di akhir atau awal-dan-akhir, bergantung pada
jenis jangkar yg diberikan pada pola.
Latihan 3
- Bagaimana pola sebuah bilangan bulat positif? Bulat negatif? Desimal
positif/negatif? - Bagaimana regex yg berbunyi “mengandung string aku”?
- Bagaimana
regex yg berbunyi “tepat string aku”? - Bagaimana
regex yg berbunyi “diakhiri string aku”? - Bagaimana
regex untuk mencocokkan nama variabel dlm PHP atau variabel skalar Perl? - Apakah
^(Mega|Rahma)wati cocok
dgn Ibu Megawati? - Apakah
[^k]apuk cocok dgn bunga
kapuk yg mulai lapuk?
Sampai di sini dulu. Sampai jumpa di bagian berikutnya.
Jawaban Latihan
Latihan1
- *.*
- Wildcard
di Linux lebih ampuh daripada di DOS. Selain karakter khusus * dan ?, shell Linux mengenali set karakter []. Untuk menyatakan kumpulan file
ZIP berawalan A, B, dan C, Anda dpt menggunakan pola [ABC]*.ZIP di Linux. Sementara di DOS
Anda perlu membuat tiga wildcard terpisah: A*.ZIP, B*.ZIP,
C*.ZIP. - Pertanyaan
ini sedikit menjebak. Kelakuan wildcard di Linux dan di DOS agak berbeda.
Wildcard pertama, F*.* akan
cocok dgn file FileSaya
di DOS. Namun di Linux, wildcard ini berarti “File yg diawali huruf F
dan mengandung titik di tengahnya.” Jadi jika nama file FileSaya.doc misalnya, maka wildcard
akan cocok di Linux. Tapi jika tanpa ekstensi—yang berarti tanpa karakter
titik—maka tdk akan cocok. Wildcard kedua pun hanya cocok di DOS. Ingat,
Unix membedakan huruf besar dan kecil. krn wildcard diawali huruf f
kecil, maka tdk akan cocok di Linux.
Latihan
2
- [Aa][Aa]?[Aa]?
- [^a-z]. Catatan, ini berarti angka,
simbol, maupun huruf besar cocok dgn pola ini. krn semuanya bukan
huruf kecil. - 1[1-5]|[234][0-9]|5[01]
- r?anting|ranjang. Pola r?an(ting|jang), meskipun lebih ringkas,
tdk dpt digunakan krn cocok jg dgn anjang, padahal itu
tdk kita inginkan. Sementara pola ranting|anting|ranjang
jg dpt digunakan, tapi tentunya itu bukan yg pola yg terpendek. - Ya.
- (Mega|Rahma)wati cocok dgn Ibu
Megawati, tapi tdk dgn Mega, krn string yg kedua
tdk mengandung wati. - Pertanyaan
ini sebuah jebakan. Regex secara default membedakan huruf besar dan kecil.
krn itu Saya( bukan)? pembohong. tdk cocok dgn saya
pembohong..
Latihan
3
Bilangan bulat positif: [0-9]+.
Bulangan bulat negatif: -[0-9]+.
Sebuah bilangan positif jg dpt diberi tanda positif di depan angkanya.
krn + adlh sebuah karakter
meta, maka kita dpt memasukkannya ke dlm set atau mengawalinya dgn \ (garis miring terbalik, backslash) untuk
membuatnya menjadi bermakna literal. Contoh: [+]?[0-9]+
atau \+?[0-9]+.
Kedua
pola di atas dpt digabung menjadi pola untuk “bilangan bulat”: [+-]?[0-9]+.
Bilangan
desimal adlh bilangan bulat yg diikuti koma desimal. Polanya adlh sebagai
berikut: [+-]?[0-9]+(,[0-9]+)?
Atau bisa jg ditulis tanpa pengelompokan dgn pola ini: [+-]?[0-9]+,?[0-9]*. Perhatikan bahwa koma desimal bersifat opsional.
aku
^aku$
aku$
Sebuah variabel dlm PHP diawali dgn karakter $
dan diikuti dgn huruf besar, huruf kecil, atau garis bawah (_) namun tdk boleh angka. Huruf kedua dan seterusnya dpt berupa huruf, garis bawah, atau angka. Sebuah variabel
dpt terdiri dari satu atau lebih karakter. Polanya adlh sebagai berikut: $[A-Za-z_][A-Za-z_0-9]*
Perhatikan bahwa karakter $ di awal pola bukanlah karakter meta. Karakter meta memiliki arti khusus hanya
dlm konteks khusus aja. Jika karakter $
tdk ditaruh di akhir pola, maka tdk berarti jangkar, melainkan karakter
literal biasa.
tdk. krn pola berjangkar, maka potongan Mega atau Rahma harus terdapat di awal string yg ingin dicocokkan. dlm kasus ini, tdk cocok
krn awal string adlh Ibu.
Ya. Tepatnya, cocok dgn lapuk. Sekali lagi, perhatikan karakter meta bergantung pada konteks. Di dlm [ ] kebanyakan karakter meta menjadi bermakna literal. dlm kasus kita, karakter
meta ^ jika di awal pola berarti jangkar, namun di awal set berarti negasi. Maka pola [^k]apuk bertugas mencari potongan string
yg bukan diawali huruf k kecil dan diikuti apuk. Potongan
string lapuk cocok dgn pola ini.
Label:
php
Senin, 14 Februari 2011
Things You Can Do With PHP cURL
cURL, and its PHP extension libcURL, are tools which can be used to simulate a web browser. And there are lots you can do with PHP Curl, here are some of them:
1. Download a file
You can download a file using PHP cURL, and it will download using HTTP request:
2. Upload with HTTP or FTP protocol
You can upload a file using PHP cURL, and it will upload using HTTP or FTP:
Upload file using HTTP:
Upload file using FTP:
3. Shorten a URL using Bit.ly
Bit.ly is an URL shortener service, and it allow us to shorten url using their API. And we can connect to their API using PHP Curl:
4. Publish post to your WordPress blog
Wordpress blog have XMLRPC feature to publish a post and publish a comment. We can use cURL to connect to this WordPress blog XMLRPC and publish a post. See my previous post: [HowTo] Publish Post Via XML-RPC In WordPress.
5. Scrape the website content
Basically all the web content is in HTML. You can grap the website content and filter the content and grab the information you want to get. For example you can use cURL to grab the search result from Google, Bing, Yahoo and etc.
6. Update your Facebook status
With cURL we can connect to Facebook and simulate as it is using a web browser and publish a status.
7. Test your download speed connection
cURL have information of the connection status. You can grab the information and show you the how long the download time and how fast your download speed.
8. Get your adsense earning
Most blogger monetize his website using adsense, including me. You can grab your adsense earning using cURL:
Download the script. (Save it as php file)
Source from: http://planetozh.com/blog/my-projects/track-adsense-earnings-in-rss-feed/
9. Post to twitter
Twitter have their API, and we can use cURL to post our tweet to twitter through their API.
10. Download a video from YouTube
With cURL we can scrape the YouTube website to get the video url and download it.
Download the script here.
1. Download a file
You can download a file using PHP cURL, and it will download using HTTP request:
set_time_limit(0); // set no time limit to download large file ini_set('display_errors',true);//Just in case we get some errors, let us know.... $fp = fopen ('path to file', 'w+');//where the file will be saved $ch = curl_init('http://somedomain.com/filename.zip');//Here is the file we are downloading curl_setopt($ch, CURLOPT_TIMEOUT, 50); curl_setopt($ch, CURLOPT_FILE, $fp); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_exec($ch); curl_close($ch); fclose($fp);
You can upload a file using PHP cURL, and it will upload using HTTP or FTP:
Upload file using HTTP:
$postdata = array(); $postdata ['fieldname'] = "@/path/to/file.zip"; //fieldname should be same as file input box name $post_url = 'http://somedomain.com/upload.php'; //url to upload file $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_VERBOSE, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_BINARYTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, $post_url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata); $response = curl_exec($ch); curl_close ($ch);
$filepath = '/path/to/local/file.zip'; $fp = $fp = fopen($filepath, 'r'); //open as read a file $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'ftp://ftp_login:password@ftp.domain.com/'.'filaname.zip'); curl_setopt($ch, CURLOPT_UPLOAD, 1); curl_setopt($ch, CURLOPT_INFILE, $fp); curl_setopt($ch, CURLOPT_INFILESIZE, filesize($filepath)); curl_exec ($ch); $error_no = curl_errno($ch); curl_close ($ch);
Bit.ly is an URL shortener service, and it allow us to shorten url using their API. And we can connect to their API using PHP Curl:
$longurl='http://www.ivankristianto.com/'; $login='your bit.ly username'; $appkey='your app key'; $api_url = 'http://api.bit.ly/shorten?version=2.0.1&longUrl='.urlencode($longurl).'&format=xml&login='.$login.'&apiKey='.$appkey; //call the API $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $api_url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $response = curl_ex_ec($curl); curl_close($curl); //parse the XML response and return the url $xml_object = new SimpleXMLElement($response); echo $xml_object->results->nodeKeyVal->shortUrl; //output the shortened url
Wordpress blog have XMLRPC feature to publish a post and publish a comment. We can use cURL to connect to this WordPress blog XMLRPC and publish a post. See my previous post: [HowTo] Publish Post Via XML-RPC In WordPress.
5. Scrape the website content
Basically all the web content is in HTML. You can grap the website content and filter the content and grab the information you want to get. For example you can use cURL to grab the search result from Google, Bing, Yahoo and etc.
function getPage($proxy, $url, $referer, $agent, $header, $timeout) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, $header); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_PROXY, $proxy); curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); curl_setopt($ch, CURLOPT_REFERER, $referer); curl_setopt($ch, CURLOPT_USERAGENT, $agent); $result['EXE'] = curl_exec($ch); $result['INF'] = curl_getinfo($ch); $result['ERR'] = curl_error($ch); curl_close($ch); return $result; } $result = getPage( '[proxy IP]:[port]', // leave it blank of using no proxy 'url to scrape start with http://', 'referer url', // leave it blank if if no referer 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8', 1, 5); //Process the $result['EXE'] here
With cURL we can connect to Facebook and simulate as it is using a web browser and publish a status.
<?php $status = 'YOUR_STATUS'; $first_name = 'YOUR_FIRST_NAME'; $login_email = 'YOUR_LOGIN_EMAIL'; $login_pass = 'YOUR_PASSWORD'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://login.facebook.com/login.php?m&next=http%3A%2F%2Fm.facebook.com%2Fhome.php'); curl_setopt($ch, CURLOPT_POSTFIELDS,'email='.urlencode($login_email).'&pass='.urlencode($login_pass).'&login=Login'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_COOKIEJAR, "my_cookies.txt"); curl_setopt($ch, CURLOPT_COOKIEFILE, "my_cookies.txt"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3"); curl_exec($ch); curl_setopt($ch, CURLOPT_POST, 0); curl_setopt($ch, CURLOPT_URL, 'http://m.facebook.com/home.php'); $page = curl_exec($ch); curl_setopt($ch, CURLOPT_POST, 1); preg_match('/name="post_form_id" value="(.*)" \/>'.ucfirst($first_name).'/', $page, $form_id); curl_setopt($ch, CURLOPT_POSTFIELDS,'post_form_id='.$form_id[1].'&status='.urlencode($status).'&update=Update'); curl_setopt($ch, CURLOPT_URL, 'http://m.facebook.com/home.php'); curl_exec($ch); ?>
cURL have information of the connection status. You can grab the information and show you the how long the download time and how fast your download speed.
<?php error_reporting(E_ALL | E_STRICT); // Initialize cURL with given url $url = 'http://download.bethere.co.uk/images/61859740_3c0c5dbc30_o.jpg'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_USERAGENT, 'Sitepoint Examples (thread 581410; http://www.sitepoint.com/forums/showthread.php?t=581410)'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2); curl_setopt($ch, CURLOPT_TIMEOUT, 60); set_time_limit(65); $execute = curl_exec($ch); $info = curl_getinfo($ch); // Time spent downloading, I think $time = $info['total_time'] - $info['namelookup_time'] - $info['connect_time'] - $info['pretransfer_time'] - $info['starttransfer_time'] - $info['redirect_time']; // Echo friendly messages header('Content-Type: text/plain'); printf("Downloaded %d bytes in %0.4f seconds.\n", $info['size_download'], $time); printf("Which is %0.4f mbps\n", $info['size_download'] * 8 / $time / 1024 / 1024); printf("CURL said %0.4f mbps\n", $info['speed_download'] * 8 / 1024 / 1024); echo "\n\ncurl_getinfo() said:\n", str_repeat('-', 31 + strlen($url)), "\n"; foreach ($info as $label => $value) { printf("%-30s %s\n", $label, $value); }
Most blogger monetize his website using adsense, including me. You can grab your adsense earning using cURL:
Download the script. (Save it as php file)
Source from: http://planetozh.com/blog/my-projects/track-adsense-earnings-in-rss-feed/
9. Post to twitter
Twitter have their API, and we can use cURL to post our tweet to twitter through their API.
<?php // Set username and password $username = 'username'; $password = 'password'; // The message you want to send $message = 'is twittering from php using curl'; // The twitter API address $url = 'http://twitter.com/statuses/update.xml'; // Alternative JSON version // $url = 'http://twitter.com/statuses/update.json'; // Set up and execute the curl process $curl_handle = curl_init(); curl_setopt($curl_handle, CURLOPT_URL, "$url"); curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2); curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl_handle, CURLOPT_POST, 1); curl_setopt($curl_handle, CURLOPT_POSTFIELDS, "status=$message"); curl_setopt($curl_handle, CURLOPT_USERPWD, "$username:$password"); $buffer = curl_exec($curl_handle); curl_close($curl_handle); // check for success or failure if (empty($buffer)) { echo 'message'; } else { echo 'success'; } ?>
With cURL we can scrape the YouTube website to get the video url and download it.
Download the script here.
Label:
php
Langganan:
Postingan (Atom)