โฮมเพจ » การเข้ารหัส » วิธีการสร้างเครื่องมือค้นหา Instagram ของคุณเองด้วย jQuery และ PHP

    วิธีการสร้างเครื่องมือค้นหา Instagram ของคุณเองด้วย jQuery และ PHP

    นับตั้งแต่ Google เปิดตัวคุณลักษณะการค้นหาแบบทันทีมันกลายเป็นเทรนด์ยอดนิยมในการออกแบบเว็บ มีตัวอย่างความสนุกออนไลน์เช่นแอป Google รูปภาพของ Michael Hart เทคนิคต่าง ๆ นั้นค่อนข้างตรงไปตรงมาแม้แต่นักพัฒนาเว็บที่มีประสบการณ์ jQuery ในระดับปานกลางก็สามารถรับ API การเขียนโปรแกรมและข้อมูล JSON ได้.

    สำหรับบทช่วยสอนนี้ฉันต้องการอธิบาย วิธีที่เราสามารถสร้างแอปพลิเคชันการค้นหาเว็บแบบทันทีที่คล้ายกัน. แทนที่จะดึงภาพจาก Google เราสามารถใช้ Instagram ซึ่งเติบโตขึ้นอย่างมากในเวลาไม่กี่ปี.

    เครือข่ายโซเชียลนี้เริ่มต้นจากการเป็นแอพมือถือสำหรับ iOS ผู้ใช้สามารถถ่ายรูปและแบ่งปันกับเพื่อนฝากความคิดเห็นและอัปโหลดไปยังเครือข่ายบุคคลที่สามเช่น Flickr ทีมเพิ่งได้มาจาก Facebook และได้เผยแพร่แอพใหม่สำหรับ Android Market ฐานผู้ใช้ของพวกเขาเติบโตขึ้นอย่างมากและตอนนี้นักพัฒนาสามารถสร้างมินิแอพที่น่าทึ่งเหมือนกับการสาธิตใน instasearch นี้.

    • ดูการสาธิต
    • แหล่งดาวน์โหลด

    การรับข้อมูลรับรอง API

    ก่อนที่จะสร้างไฟล์โครงการใด ๆ เราควรพิจารณาแนวคิดที่อยู่เบื้องหลังระบบ API ของ Instagram ก่อน คุณจะต้องมีบัญชีเพื่อเข้าถึงพอร์ทัลของผู้พัฒนาซึ่งมีคำแนะนำที่เป็นประโยชน์สำหรับผู้เริ่มต้น ทั้งหมดที่เราต้องสืบค้นฐานข้อมูล Instagram คือ “รหัสลูกค้า”.

    ในแถบเครื่องมือด้านบนคลิกลิงก์จัดการลูกค้าจากนั้นคลิกปุ่มสีเขียว “ลงทะเบียนลูกค้าใหม่”. คุณจะต้องให้ชื่อคำอธิบายสั้น ๆ และ URL ของแอปพลิเคชัน URL และ Redirect URI สามารถเป็นค่าเดียวกันในอินสแตนซ์นี้เท่านั้นเนื่องจากเราไม่จำเป็นต้องตรวจสอบสิทธิ์ผู้ใช้ เพียงกรอกค่าทั้งหมดและสร้างรายละเอียดแอปพลิเคชันใหม่.

    คุณจะเห็นสตริงอักขระยาวชื่อ รหัสลูกค้า. เราจะต้องใช้รหัสนี้ในภายหลังเมื่อสร้างสคริปต์ส่วนหลังดังนั้นเราจะกลับไปที่ส่วนนี้ สำหรับตอนนี้เราสามารถเริ่มต้นสร้างแอพพลิเคชั่นค้นหา jQuery ได้ทันที.

    เนื้อหาหน้าเว็บเริ่มต้น

    HTML ที่แท้จริงนั้นบางมากสำหรับปริมาณการใช้งานที่เราใช้ เนื่องจากข้อมูลรูปภาพส่วนใหญ่ถูกผนวกเข้ากับไดนามิกเราจึงต้องการองค์ประกอบขนาดเล็กเพียงเล็กน้อยในหน้า รหัสนี้อยู่ภายใน index.html ไฟล์.

        แอพค้นหารูปภาพ Instagram Instagram พร้อม jQuery       
    หมายเหตุ: ไม่อนุญาตให้เว้นวรรคหรือเครื่องหมายวรรคตอน การค้นหา จำกัด เพียงหนึ่งคำหลัก (1) คำ.

    ฉันใช้ไลบรารี jQuery 1.7.2 ล่าสุดพร้อมกับ. css และ. js สองแหล่งข้อมูลภายนอก ฟิลด์ค้นหาอินพุตไม่มี wrapper แบบฟอร์มด้านนอกเนื่องจากเราไม่ต้องการส่งฟอร์มและทำให้เกิดการโหลดหน้าซ้ำ ฉันปิดการใช้งานการกดแป้นบางอย่างภายในช่องค้นหาเพื่อให้มีข้อ จำกัด มากขึ้นเมื่อผู้ใช้พิมพ์.

    เราจะเติมข้อมูลภาพถ่ายทั้งหมดใน ID ส่วนตรงกลาง #photos. มันทำให้ HTML พื้นฐานของเราสะอาดและอ่านง่าย องค์ประกอบ HTML ภายในอื่น ๆ ทั้งหมดจะถูกเพิ่มผ่าน jQuery และจะถูกลบออกก่อนการค้นหาใหม่แต่ละครั้ง.

    การดึงจาก API

    ฉันต้องการเริ่มต้นด้วยการสร้างสคริปต์ PHP แบบไดนามิกของเราแล้วย้ายไปยัง jQuery ไฟล์ใหม่ของฉันชื่อ instasearch.php ซึ่งจะมีตะขอแบ็คเอนด์ที่สำคัญทั้งหมดลงใน API.

     

    บรรทัดแรกแสดงว่าข้อมูลส่งคืนของเราถูกจัดรูปแบบเป็น JSON แทนข้อความธรรมดาหรือ HTML นี่เป็นสิ่งจำเป็นสำหรับฟังก์ชั่น JavaScript ในการอ่านข้อมูลอย่างถูกต้อง หลังจากนั้นฉันมีการตั้งค่าตัวแปรบางอย่างที่มี ID ไคลเอ็นต์แอปพลิเคชันค่าการค้นหาผู้ใช้และ URL API สุดท้าย ตรวจสอบให้แน่ใจว่าคุณอัปเดต ลูกค้า $ ค่าสตริงเพื่อให้ตรงกับแอปพลิเคชันของคุณเอง.

    ในการเข้าถึงข้อมูล URL นี้เราจำเป็นต้องวิเคราะห์เนื้อหาไฟล์หรือใช้ฟังก์ชั่น cURL ฟังก์ชั่นที่กำหนดเอง get_curl () เป็นโค้ดเพียงเล็กน้อยที่ตรวจสอบกับการกำหนดค่า PHP ปัจจุบัน.

    หากคุณไม่ได้เปิดใช้งาน cURL สิ่งนี้จะพยายามเปิดใช้งานคุณลักษณะและดึงข้อมูลผ่านไลบรารีฟังก์ชั่นของตัวเอง มิฉะนั้นเราสามารถใช้ file_get_contents () ซึ่งมีแนวโน้มที่จะช้ากว่า แต่ก็ยังใช้งานได้เช่นกัน จากนั้นเราก็สามารถดึงข้อมูลนี้ไปเป็นตัวแปรเช่น:

    $ response = get_curl ($ api); 

    การจัดระเบียบและการส่งคืนข้อมูล

    เราสามารถส่งคืนการตอบสนอง JSON ดั้งเดิมนี้จาก Instagram ด้วยข้อมูลทั้งหมดที่โหลดไว้ แต่มีข้อมูลเพิ่มเติมมากมายและมันน่ารำคาญมากที่จะวนซ้ำทุกสิ่ง ฉันชอบจัดระเบียบคำตอบของอาแจ็กซ์และดึงข้อมูลที่เราต้องการ.

    ก่อนอื่นเราสามารถตั้งค่าอาร์เรย์ว่างสำหรับภาพทั้งหมด จากนั้นภายใน แต่ละ() วนรอบเราจะดึงวัตถุข้อมูล JSON ออกหนึ่งต่อหนึ่ง เราต้องการค่าเฉพาะสาม (3) ค่าซึ่งก็คือ $ src(URL รูปภาพขนาดเต็ม), $ นิ้วหัวแม่มือ(URL รูปภาพขนาดย่อ) และ $ URL(ลิงก์รูปภาพที่ไม่ซ้ำ).

    $ images = array (); if ($ response) foreach (json_decode ($ response) -> data เป็น $ item) $ src = $ item-> images-> standard_resolution-> url; $ thumb = $ item-> images-> thumbnail-> url; $ url = $ item-> ลิงค์; $ images [] = array ("src" => htmlspecialchars ($ src), "thumb" => htmlspecialchars ($ thumb), "url" => htmlspecialchars ($ url));  

    ผู้ที่ไม่คุ้นเคยกับลูป PHP อาจหลงทางในกระบวนการ อย่ามุ่งเน้นตัวอย่างโค้ดเหล่านี้มากนักถ้าคุณไม่เข้าใจไวยากรณ์ รูปภาพของเรามีภาพที่ไม่ซ้ำกันมากถึง 16-20 รายการซึ่งดึงมาจากวันที่เผยแพร่ล่าสุด จากนั้นเราสามารถส่งออกรหัสทั้งหมดนี้ลงบนหน้าเว็บเป็นการตอบสนอง jQuery Ajax.

    print_r (str_replace ('\\ /', '/', json_encode ($ images))); ตาย(); 

    แต่ตอนนี้เราได้ดูเบื้องหลังแล้วเราสามารถกระโดดเข้าไปในสคริปต์ส่วนหน้าได้ ฉันสร้างไฟล์แล้ว ajax.js ซึ่งมีตัวจัดการเหตุการณ์คู่เชื่อมโยงกับช่องค้นหา หากคุณยังคงติดตามจนถึงตอนนี้ขอให้คุณรู้สึกตื่นเต้นที่เราใกล้จะเสร็จสมบูรณ์!

    jQuery Key Events

    เมื่อเปิดเอกสารครั้งแรก พร้อม () เหตุการณ์ฉันกำลังตั้งค่าตัวแปรคู่ สองตัวแรกทำงานเป็นตัวเลือกเป้าหมายโดยตรงสำหรับช่องค้นหาและที่เก็บภาพถ่าย ฉันยังใช้ตัวจับเวลา JavaScript เพื่อหยุดการค้นหาชั่วคราวจนกว่า 900 มิลลิวินาทีหลังจากผู้ใช้พิมพ์เสร็จแล้ว.

    $ (เอกสาร). ready (function () var sfield = $ ("# s"); var container = $ ("# photos"); var timer; 

    มีฟังก์ชั่นบล็อกหลักเพียงสองบล็อกเท่านั้นที่เราทำงานด้วย ตัวจัดการหลักจะถูกเรียกใช้โดยเหตุการณ์. keydown () เมื่อเน้นไปที่ช่องค้นหา ก่อนอื่นเราตรวจสอบว่ารหัสกุญแจตรงกับกุญแจที่ต้องห้ามของเราหรือไม่และหากคัดค้านเหตุการณ์สำคัญ มิฉะนั้นจะล้างตัวจับเวลาเริ่มต้นและรอ 900 มิลลิวินาทีก่อนที่จะโทร instaSearch ().

    / ** * คำศัพท์ keycode * 32 = SPACE * 188 = COMMA * 189 = DASH * 190 = ระยะเวลา * 191 = BACKSLASH * 13 = ENTER * 219 = BRACKET ด้านซ้าย * 220 = ฟอร์เวิร์ดแบ็ค * 221 = RACK BRACKET * / $ (sfield ) .keydown (ฟังก์ชัน (e) ถ้า (e.keyCode == '32' || e.keyCode == '188' || e.keyCode == '189' || e.keyCode == '13' | | e.keyCode == '190' || e.keyCode == '219' || e.keyCode == '221' || e.keyCode == '191' || e.keyCode == '220') e.preventDefault (); else clearTimeout (ตัวจับเวลา); timer = setTimeout (ฟังก์ชั่น () instaSearch ();, 900);; 

    ทุกครั้งที่คุณอัปเดตค่ามันจะไปดึงผลการค้นหาใหม่โดยอัตโนมัติ นอกจากนี้ยังมีรหัสคีย์อื่น ๆ อีกมากมายที่เราอาจบล็อกไม่ให้เรียกใช้ฟังก์ชัน Ajax แต่มีมากเกินไปสำหรับการแสดงรายการในบทช่วยสอนนี้.

    ฟังก์ชัน Ajax instaSearch ()

    ภายในฟังก์ชั่นที่กำหนดเองใหม่ของฉันเราจะเพิ่มเป็นครั้งแรก “โหลด” ชั้นเรียนลงในช่องค้นหา คลาสนี้จะอัปเดตไอคอนกล้องสำหรับรูปภาพ gif ที่กำลังโหลดใหม่ เราต้องการลบข้อมูลที่เป็นไปได้ที่เหลืออยู่ในส่วนภาพถ่าย ตัวแปรคิวรี่จะถูกดึงแบบไดนามิกจากค่าปัจจุบันที่ป้อนในช่องค้นหา.

    ฟังก์ชั่น instaSearch () $ (sfield) .addClass ("กำลังโหลด"); $ (คอนเทนเนอร์) .empty (); var q = $ (sfield) .val (); $ .ajax (ประเภท: 'POST', url: 'instasearch.php', ข้อมูล: "q =" + q, ความสำเร็จ: ฟังก์ชัน (ข้อมูล) $ (sfield) .removeClass ("กำลังโหลด"); $ .each (data, function (i, item) var ncode = '
    '; $ (คอนเทนเนอร์) .append (nCode); ); , ข้อผิดพลาด: ฟังก์ชัน (xhr, type, exception) $ (sfield) .removeClass ("loading"); $ (คอนเทนเนอร์) .html ("ข้อผิดพลาด:" + ประเภท); );

    หากคุณคุ้นเคยกับฟังก์ชัน. jax () แล้วพารามิเตอร์เหล่านี้ทั้งหมดควรดูคุ้นเคย ฉันผ่านพารามิเตอร์การค้นหาผู้ใช้ “Q” เป็นข้อมูล POST เมื่อประสบความสำเร็จและล้มเหลวเราจะลบ “โหลด” ชั้นเรียนและต่อท้ายคำตอบใด ๆ กลับเข้ามา #photos เสื้อคลุม.

    ภายในฟังก์ชั่นความสำเร็จเราจะวนลูปผ่านการตอบสนอง JSON สุดท้ายเพื่อดึงองค์ประกอบ div แต่ละตัวออกมา เราสามารถบรรลุลูปนี้ได้ด้วยฟังก์ชัน $ .each () และกำหนดเป้าหมายอาเรย์ข้อมูลการตอบกลับของเรา มิฉะนั้นวิธีการที่ล้มเหลวจะส่งข้อความแสดงข้อผิดพลาดการตอบสนองโดยตรงจาก Instagram API โดยตรง และนั่นคือทั้งหมดที่มีให้!

    • ดูการสาธิต
    • แหล่งดาวน์โหลด

    ความคิดสุดท้าย

    ทีมงาน Instagram ได้ทำการปรับขนาดงานที่ยอดเยี่ยมเช่นแอปพลิเคชันอันยิ่งใหญ่ API อาจช้าในบางครั้ง แต่ข้อมูลการตอบสนองจะถูกจัดรูปแบบอย่างเหมาะสมและใช้งานได้ง่ายมาก ฉันหวังว่าบทช่วยสอนนี้สามารถแสดงให้เห็นว่ามีพลังมากมายในการทำงานกับแอปพลิเคชันบุคคลที่สาม.

    น่าเสียดายที่คำค้นหา Instagram ปัจจุบันไม่อนุญาตให้มากกว่า 1 แท็กในแต่ละครั้ง นี่เป็นการ จำกัด การสาธิตของเรา แต่แน่นอนไม่ได้ลบเสน่ห์ใด ๆ คุณควรตรวจสอบตัวอย่างสดด้านบนและดาวน์โหลดสำเนาซอร์สโค้ดของฉันเพื่อเล่นกับ นอกจากนี้แจ้งให้เราทราบความคิดของคุณในส่วนการสนทนาโพสต์ด้านล่าง.