รวดเร็ว - กำลังดึงเมตาแท็ก OpenGraph จาก URL

ฉันกำลังพยายามดึงแท็ก og (OpenGraph) จาก URL และแสดงในแอป ฉันได้รับแท็กอย่างถูกต้องสำหรับเว็บไซต์ส่วนใหญ่ แต่สำหรับบางเว็บไซต์ ฉันไม่ได้รับ

อดีต. URL นี้

เมื่อฉันเรนเดอร์มันบนเบราว์เซอร์และตรวจสอบ มันแสดงเมตาแท็กให้ฉันเห็น แต่เมื่อฉันพยายามดึงข้อมูล html ผ่าน cURL มันจะส่งคืนเนื้อหา html โดยไม่มีเมตาใดๆ แต่เมื่อฉันแชร์ URL ใน Slack หรือ FB มันจะเรนเดอร์ตัวอย่างด้วยแท็ก OG

ฉันจะทำอย่างไรบน iOS?

ความช่วยเหลือใด ๆ ที่ชื่นชม


person melaka    schedule 20.08.2018    source แหล่งที่มา


คำตอบ (1)


ปัญหาเกี่ยวกับ URL ที่คุณแชร์คือไซต์นั้นจำเป็นต้องเปิดใช้งาน Javascript

หากคุณไม่ได้เปิดใช้งาน Javascript คุณจะกลับมาที่หน้าพื้นฐานโดยแจ้งว่าคุณต้องเปิดใช้งาน Javascript เพื่อเรียกดูไซต์ (ดังนั้นจึงไม่มีแท็ก Open Graph)

เบราว์เซอร์ของคุณ Slack และ Facebook ใช้งาน Javascript แต่ cURL ไม่ดำเนินการ URLSession ใน iOS จะไม่มีเช่นกัน

ใน iOS วิธีเดียวที่คุณจะสามารถเข้าถึง HTML สำหรับเว็บไซต์ดังกล่าวได้คือใช้ WKWebView เพื่อแสดงผลเพจ

จากนั้น เมื่อโหลดแล้ว ให้รัน Javascript โดยใช้ evaluateJavascript(_:completionHandler:) เพื่อรับแท็ก OG

นั่นเป็นวิธีแก้ปัญหาเดียวที่ใช้การได้สำหรับกรณีเหล่านี้โดยใช้ไลบรารี iOS

ไคลเอนต์ iOS สำหรับ Facebook, LinkedIn ฯลฯ ไม่ทำเช่นนี้บนไคลเอนต์ iOS ไคลเอนต์ iOS เรียกแบ็คเอนด์ ส่ง URL เพื่อประมวลผล และรับตัวอย่างกลับมา Javascript ถูกดำเนินการโดยเป็นส่วนหนึ่งของกระบวนการแบ็กเอนด์นี้

มี API สาธารณะที่จะช่วยให้คุณทำสิ่งเดียวกันได้ เช่น:

https://opengraph.io

person Pete Morris    schedule 20.08.2018
comment
ขอบคุณสำหรับคำตอบ. แต่ Facebook, LinkedIn และแอพมือถืออื่น ๆ แสดงตัวอย่างอย่างถูกต้อง คุณหมายถึงว่าพวกเขาทั้งหมดแสดงผล URL ใน WKWebView และดึงแท็กจากที่นั่นใช่ไหม - person melaka; 21.08.2018
comment
ไม่ บริษัทเหล่านั้นไม่ได้ประมวลผล URL บนไคลเอนต์ iOS การแสดงตัวอย่างของ Facebook มีกระบวนการแบ็กเอนด์ แอปของพวกเขาเรียกแบ็กเอนด์ โดยส่ง URL เพื่อประมวลผล และรับตัวอย่างกลับมา พวกเขายังมีแคชด้วย ดังนั้นหากมีการแชร์ URL อีกครั้ง พวกเขาจะได้ไม่ต้องไปแยกวิเคราะห์ HTML ของเว็บไซต์อีกครั้ง WKWebView ไม่ใช่โซลูชันที่ดีเลิศ แต่เป็นโซลูชันเดียวที่คุณจะพบว่าสามารถใช้งานได้โดยใช้เฟรมเวิร์ก iOS (ตามคำถามของคุณ) มี API สาธารณะที่คุณสามารถใช้จากแอป iOS ของคุณเพื่อทำสิ่งนี้บนแบ็กเอนด์ เช่น Facebook ฯลฯ ลองดู: opengraph.io - person Pete Morris; 21.08.2018
comment
ฉันได้อัปเดตคำตอบแล้วเนื่องจากขอบเขตของคำถามเปลี่ยนไป - person Pete Morris; 21.08.2018