เนื่องจาก pinterest ได้ให้วันที่ซ้ำแล้วจึงล้มเหลวในการปล่อย API ของพวกเขาฉันจึงตัดสินใจที่จะนำเรื่องนี้ไปใช้ในมือของฉันเอง โปรดทราบว่านี่ไม่ใช่วิธีที่เหมาะสำหรับการทำสิ่งต่างๆ แต่สำหรับตอนนี้ก็ใช้ได้ผลดี ฉันต้องการสร้างกราฟทางสังคมของหน้ายอดนิยมของเราเพื่อให้เราสามารถทราบว่ารูปถ่ายและเนื้อหาใดที่สะท้อนกับผู้ชมของเราดังนั้นฉันจึงได้สคริปต์ด้านล่างและลูปผ่าน URL ทุกครั้งในฐานข้อมูลของเราและได้รับข้อมูลที่ฉัน จำเป็น
ฉันเจาะลงใน iframe ที่สร้างขึ้นโดยการเรียกปุ่มปุ่ม pinterest และมากับ url นี้:
http://pinit-cdn.pinterest.com/pinit.html?url=http://www.allrecipes.com
ดีที่เป็นเรื่องง่ายตัวเลขจะปรากฏในที่นี้ด้วยรหัส div CountBubble ของตัวเอง ดังนั้นฉันจึง curl'ed และใช้ simple_html_dom php library เพื่อแยกวิเคราะห์ มันยังคงกลับมา 0 แม้ว่า อ๊ะ! จำนวนนี้มีการเปลี่ยนแปลงด้วย javascript หลังจากโหลดหน้าเว็บแล้ว ควรดูแหล่งข้อมูลแทนการตรวจสอบองค์ประกอบ ดังนั้นฉันดูแหล่งที่มาแทนและมีชิ้นดีนี้ของรหัสเพียงแค่นั่งอยู่ที่นั่นเพื่อความสุขโปรแกรมของฉัน
snode.setAttribute ('src', '//api.pinterest.com/v1/urls/count.json?callback=receiveCount&url='+targetUrl);
จากนั้นฉันรวบรวม URL ต่อไปนี้อาจจะดึงข้อมูลที่ฉันต้องการ
http://api.pinterest.com/v1/urls/count.json?callback=receiveCount&url=http://www.allrecipes.com
ซึ่งจะแสดง:
receiveCount ({"count": 1148, "url": "http://www.allrecipes.com"})
ดังนั้นข้อมูล json ที่ถูกห่อหุ้มไว้ในการเรียกฟังก์ชันจาก API ที่พวกเขายังไม่ได้เผยแพร่ต่อสาธารณชน วิธีที่สะดวก. ด้านล่างนี้เป็นโค้ดที่คุณต้องใช้ในการทำงานนี้ใน PHP คุณต้องเปิดใช้งาน cURL บนเซิร์ฟเวอร์ของคุณ
$ pinurl = "http://api.pinterest.com/v1/urls/count.json?callback=receiveCount&url="; $ targeturl = "http://www.allrecipes.com/"; $ pinurl. = $ brandurl; $ html = pull_html ($ pinurl); / / รับ html ผ่านฟังก์ชันที่เรียกว่า cURL $ html = str_replace ("receiveCount (", "", $ html); / / ลบฟังก์ชันโทรข้อมูลถูกห่อใน $ html = substr ($ html, "" -1); $ pinterest = json_decode ($ html); // แปลงจาก json ไปเป็น PHP array $ pincount = $ pinterest-> count; echo $ pincount; // มีฟังก์ชัน number 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_exec ($ ch); curl_close ($ ch); return $ html;}
ดังที่คุณเห็นเราดึงข้อมูลด้วยการขดแล้วตัดการเรียกฟังก์ชันที่ล้อมรอบข้อมูล json ออก ก็เพียงเรื่องของการใช้ json_decode เพื่อเปิดข้อมูล json ลงในแถว PHP Voila! ทุกอย่างเสร็จเรียบร้อย. ฉันใช้งานประมาณ 3, 000 URL แล้วและข้อมูลกลับไม่มีปัญหา มันเป็นเวลาที่ช้ามากไม่แน่ใจว่าโดยการออกแบบหรือโดย ยังคงดึงและจัดเก็บข้อมูลตามที่ฉันพิมพ์ ฉันแน่ใจว่าในบางจุดจะมีการจัดเรียงของอัตราการ จำกัด แต่ฉันไม่ได้วิ่งเข้าไปในผนังใด ๆ เพื่อให้ห่างไกล บางทีนี่อาจไม่ได้ถูกซ่อนไว้จากโปรแกรมเมอร์ แต่เท่าที่ฉันรู้ไม่มีการสนับสนุนอย่างเป็นทางการเว้นแต่คุณจะเป็นหนึ่งในผู้จัดพิมพ์ไม่กี่แห่งที่พวกเขาเลือกที่จะทำงานด้วย