Anonim

Karena telah berulang kali memberikan tanggal dan kemudian gagal merilis API mereka, saya memutuskan untuk membawa masalah itu ke tangan saya sendiri. Harap dicatat bahwa ini bukan cara yang ideal untuk melakukan sesuatu, tetapi, untuk saat ini berfungsi. Saya ingin membuat grafik sosial dari halaman kami yang paling populer sehingga kami bisa tahu foto dan konten seperti apa yang beresonansi dengan pemirsa kami, jadi saya membuat skrip di bawah ini dan kemudian memutari setiap URL di database kami dan mendapatkan data yang saya miliki. dibutuhkan.

Saya menelusuri ke dalam iframe yang dibuat oleh tombol panggil dan muncul dengan url ini:
http: //pinit-cdn..com/pinit.html? url = http: //www.allrecipes.com
Yah itu mudah, nomornya ditampilkan di sana di CountBubble div id sendiri. Jadi saya meringkasnya, dan menggunakan perpustakaan php simple_html_dom untuk mengurai. Itu terus mengembalikan 0 sekalipun. Aduh! Angka itu diubah dengan javascript setelah halaman dimuat. Seharusnya melihat sumber daripada memeriksa elemen. Jadi saya melihat sumbernya dan ada potongan kode yang bagus ini hanya duduk di sana untuk kesenangan pemrograman saya.

snode.setAttribute ('src', '//api..com/v1/urls/count.json?callback=receiveCount&url='+targetUrl);

Dari itu, saya mengumpulkan URL berikut mungkin akan menarik data yang saya butuhkan,
http: //api..com/v1/urls/count.json? callback = acceptCount & url = http: //www.allrecipes.com
yang menampilkan:

acceptCount ({"count": 1148, "url": "http://www.allrecipes.com"})

Jadi, data json-nya dibungkus dengan panggilan fungsi dari API yang belum dirilis ke publik. Alangkah nyaman. Di bawah ini adalah sedikit kode yang Anda butuhkan untuk membuat ini berfungsi dalam PHP. Anda harus mengaktifkan CURL di server Anda.

$ pinurl = "http: //api..com/v1/urls/count.json? callback = acceptCount & url ="; $ targeturl = "http://www.allrecipes.com/"; $ pinurl. = $ brandurl; $ html = pull_html ($ pinurl); // dapatkan html melalui fungsi yang memanggil cURL $ html = str_replace ("acceptCount (", "", $ html); // hapus fungsi panggil data dibungkus $ html = substr ($ html, "",, -1); $ = json_decode ($ html); // konversi dari json ke php array $ pincount = $ -> count; echo $ pincount; // ada fungsi angka pull_html ($ url) {$ ch = curl_init () ; curl_setopt ($ ch, CURLOPT_URL, $ url); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ ch, CURLOPT_CONNECTTIMEOUT, 10); $ html = curl_ex ($); ;}

Seperti yang Anda lihat, kami menarik data dengan curl kemudian menghapus panggilan fungsi yang melilit data json. Maka itu hanya masalah menggunakan json_decode untuk mengubah data json menjadi array php. Voila! Semua selesai. Saya telah menjalankan sekitar 3.000 URL sejauh ini dan data telah kembali tanpa masalah. Itu agak lambat di kali, tidak yakin apakah dengan desain atau oleh. Masih menarik dan menyimpan data saat saya mengetik ini. Saya yakin pada titik tertentu akan ada semacam pembatasan tingkat, tapi sejauh ini saya belum menemukan dinding. Mungkin ini bahkan tidak seharusnya disembunyikan dari programmer, tetapi sejauh yang saya tahu, tidak ada dukungan resmi kecuali Anda salah satu dari sedikit penerbit yang telah mereka pilih untuk bekerja sama.

Mendapatkan jumlah pin pinterest di php