ค้นหารหัสการแชร์โดยทางโปรแกรมด้วย oEmbed
เผยแพร่แล้ว: 2022-03-10เว็บเต็มไปด้วยบริการที่โฮสต์เนื้อหาที่หลากหลาย เช่น วิดีโอ รูปภาพ เพลงและพอดแคสต์ แผนที่และกราฟ และสิ่งอำนวยความสะดวกต่างๆ เป็นไปได้ว่าเมื่อคุณเพิ่มเนื้อหาของคุณลงในไซต์ มันจะเสนอวิธีการฝังเนื้อหานั้นในหน้าเว็บที่อื่น
ไซต์เช่น YouTube มีโปรแกรมเล่นแบบฝังได้ซึ่งเป็นที่นิยมใช้ในโพสต์บล็อกและแม้แต่หน้าผลิตภัณฑ์ Soundcloud มีรหัสสำหรับการฝังเครื่องเล่นเพลงในเว็บไซต์ของวงดนตรีของคุณ ผู้ระดมทุนเพื่อการกุศลอาจอัปโหลดเส้นทางของการแข่งขันครั้งใหญ่ไปยังเว็บไซต์อย่าง Strava และต้องการแชร์บนไซต์ระดมทุนเพื่อแสดงผู้สนับสนุน
ทั้งหมดนี้ทำได้โดยการค้นหาตัวเลือก แชร์ บนไซต์ที่โฮสต์และคัดลอกโค้ดที่ปกติแล้วจะผสมระหว่าง HTML และ JavaScript รหัสดังกล่าวมักจะถูกวางลงในหน้าปลายทาง และไซต์ที่ให้บริการโฮสต์จะนำเสนอเนื้อหาที่หลากหลายเพื่อให้เพื่อน ลูกค้า และผู้ติดต่อของคุณได้เห็น
จนถึงตอนนี้ ดีมาก และครอบคลุมตัวเลือกสำหรับการฝังเนื้อหาด้วยตนเองได้ค่อนข้างดี อย่างไรก็ตาม มีกรณีการใช้งานที่สองที่ชัดเจน ซึ่งผลลัพธ์จะเหมือนกัน แต่เส้นทางไปยังมันแตกต่างกันมาก
การแชร์แบบเป็นโปรแกรม
สมมติว่าคุณกำลังสร้างแอปหรือไซต์ที่ยอมรับเนื้อหาจากผู้ใช้ นั่นอาจเป็นเรื่องง่ายๆ เหมือนกับหน้าอินทราเน็ตพื้นฐานสำหรับพนักงานในการแบ่งปันข่าวสารกับเพื่อนร่วมงาน หรือบางอย่างที่ยิ่งใหญ่ เช่น เครือข่ายสังคมออนไลน์ที่ผู้คนสามารถลงทะเบียนและเริ่มโพสต์ได้
ในทั้งสองกรณี คุณต้องค้นหาว่าต้องทำอย่างไรหากผู้ใช้เพิ่ม URL เป็นส่วนหนึ่งของเนื้อหานั้น คุณสามารถจินตนาการถึงสถานการณ์สมมติได้:
Check out this video! https://youtu.be/jw7bRnFbwAI
ณ จุดนี้ ในฐานะระบบการเผยแพร่ คุณต้องคิดให้ออกว่าต้องทำอย่างไร ตัวเลือกแรกคือไม่ต้องทำอะไรเลย และปล่อยให้ URL เป็นข้อความธรรมดา นั่นไม่ใช่แนวคิดที่ยอดเยี่ยม เนื่องจากโดยทั่วไปผู้ใช้มักจะต้องการคลิกที่ URL และข้อความธรรมดาจะไม่ช่วยให้พวกเขาไปที่หน้าอีกด้านหนึ่ง
ตัวเลือกที่สองคือเปลี่ยนเป็นลิงค์ นั่นเป็นขั้นตอนต่อไปที่ดี เนื่องจากผู้ใช้สามารถติดตามลิงก์และไปที่เนื้อหาได้ แต่ในการทำเช่นนั้น พวกเขาออกจากเว็บไซต์ของคุณและอาจไม่กลับมาอีกในทันที
ประสบการณ์การใช้งานที่ดีที่สุดคือสามารถดึงโปรแกรมเล่นสำหรับเนื้อหานั้นและฝังไว้ที่นั่นแทนที่จะเป็นเพียง URL ซึ่งจะทำให้ผู้ใช้ได้สัมผัสกับเนื้อหาภายในไซต์ของคุณโดยตรง เหมือนกับที่พวกเขาทำบน Facebook เป็นต้น
สิ่งนี้ทำให้เกิดปัญหา ระบุ URL ฉันจะเปลี่ยนเป็นโค้ดฝัง HTML/JavaScript ที่จำเป็นเพื่อแสดงให้ผู้เล่นหลายคนแสดงบนหน้าเว็บได้อย่างไร
หากเป็นเว็บไซต์ที่เป็นที่รู้จักอย่าง YouTube ฉันสามารถเขียนโค้ดที่ใช้ YouTube API เพื่อดึงข้อมูลวิดีโอ และรับหรือสร้างโค้ดสำหรับฝังด้วยวิธีนั้น ฉันสามารถทำเช่นเดียวกันกับบริการวิดีโออื่นๆ เช่น Vimeo และ VIVO ฉันสามารถเขียนโค้ดเพื่อจดจำ URL ของ Flickr และ Instagram และใช้ API ของพวกมันเพื่อดึงรูปภาพเวอร์ชันที่ฝังได้อย่างสวยงาม และเช่นเดียวกันสำหรับ Twitter และทวีต แต่ฟังดูเหมือนงานเยอะ!
ทางที่ดีที่สุดคือหากมีวิธีการที่เป็นมาตรฐานในการรับจาก URL ของเนื้อหาไปยังบล็อกของโค้ดฝังเพื่อแสดงเนื้อหานั้นบนหน้าเว็บ หากคุณให้ความสนใจ คุณจะรู้ว่าคำตอบนั้นคือ oEmbed
ที่มาของ oEmbed
นี่เป็นปัญหาที่ Leah Culver มีในขณะที่ทำงานกับ Pownce (ไซต์เครือข่ายสังคมที่เป็นนวัตกรรมอย่างแท้จริงซึ่งเป็น Betamax ไปยัง VHS ของ Twitter) Pownce ต้องการฝังการแสดงเนื้อหาที่หลากหลายลงในสตรีมอัปเดตของผู้ใช้ แต่ไม่ต้องการจำกัดการสนับสนุนเฉพาะบริการที่พวกเขาเขียนโค้ดโดยเฉพาะเพื่อรวมเข้าด้วยกัน ระหว่างรับประทานอาหารค่ำกับเพื่อนร่วมงาน ไมค์ มาโลน และแคล เฮนเดอร์สัน (ผู้นำด้านวิศวกรรมที่ Flickr ซึ่งเป็นหนึ่งในผู้ให้บริการรายใหญ่ของเนื้อหาดังกล่าวในขณะนั้น) และริชาร์ด โครว์ลีย์ พวกเขาร่วมกันขุดแนวคิดเกี่ยวกับมาตรฐานเปิดสำหรับการรับโค้ดฝังตัวจาก URL เฮนเดอร์สันจากไปและร่างบางอย่างขึ้นจากการสนทนา และ oEmbed ก็ถือกำเนิดขึ้น
การใช้ oEmbed
นี่คือวิธีการทำงาน
เริ่มต้นด้วย URL ที่ชี้ไปยังรายการเนื้อหาเดียว นั่นอาจเป็นวิดีโอ YouTube รูปภาพหรืออะไรก็ตาม โดยปกติแล้ว ผู้ใช้ไซต์หรือแอปของคุณจะจัดเตรียมข้อมูลนี้โดยเป็นส่วนหนึ่งของเนื้อหาบางส่วนที่พวกเขาต้องการเผยแพร่ ขั้นตอนแรกคือการดึงเนื้อหาของเพจที่ URL นั้น ซึ่งควรเป็นหน้า HTML
หากไซต์ที่โฮสต์เนื้อหารองรับ oEmbed ในส่วน <head>
ของหน้านั้นควรมีองค์ประกอบ link
ที่มีประเภทเนื้อหา oembed
:
<link rel="alternate" type="application/json+oembed" href="https://youtube.com/oembed?url=https%3A%2F%2Fyoutu.be%2Fjw7bRnFbwAI&format=json" title="Inclusive Components with Heydon Pickering" />
หมายเหตุเกี่ยวกับ XML: oEmbed รองรับการตอบสนองทั้งในรูปแบบ XML และ JSON สำหรับบทความนี้ ฉันกำลังพิจารณา JSON เท่านั้น เพราะเราไม่ใช่คนป่าเถื่อน หากคุณอยู่ในตำแหน่งที่โชคร้ายที่ต้องทำงานกับ XML โปรดทราบว่ารูปแบบนี้รองรับกับข้อกำหนด oEmbed แม้ว่าคุณอาจพบว่าผู้ให้บริการบางรายเสนอเฉพาะการตอบกลับ JSON เท่านั้น
แท็กลิงก์นี้เป็นแอตทริบิวต์ rel
ที่ตั้งค่าเป็น alternate
และ type
ตั้งค่าเป็น application/json+oembed
หรือ text/xml+oembed
คุณลักษณะนี้ทำให้เราทราบว่า URL ที่ระบุใน href
เป็นปลายทาง oEmbed API สำหรับการดึงรายละเอียดของเนื้อหา
URL นั้นมักจะมีสองพารามิเตอร์: url
และ format
พารามิเตอร์ | ค่า |
---|---|
url (จำเป็น) | ที่อยู่เว็บที่เข้ารหัส URL ของรายการเนื้อหา |
format | รูปแบบที่คุณต้องการตอบกลับ หนึ่งใน json หรือ xml |
พารามิเตอร์ URL ทั่วไปสำหรับคำขอผู้บริโภคเริ่มต้น

ข้อมูลจำเพาะฉบับเต็มมีรายละเอียดมากขึ้นที่นี่ (และคุณควรอ้างอิงว่าหากสร้างการใช้งานของคุณเอง) แต่นี่คือสองพารามิเตอร์ที่คุณน่าจะเห็นมากที่สุด
ดังนั้นเราจึงมี URL ดึงหน้า พบแท็กลิงก์ oEmbed ที่มี URL อื่นสำหรับปลายทาง API ต่อไป เราขอ URL ใหม่นั้น และส่งคืนข้อมูลทั้งหมดที่บริการมีให้เกี่ยวกับเนื้อหาชิ้นนั้น
{ "author_name": "Smashing Magazine", "width": 480, "title": "Smashing TV: Inclusive Components with Heydon Pickering (Nov 7th 2019)", "provider_name": "YouTube", "height": 270, "html": "<iframe width=\"480\" height=\"270\" src=\"https://www.youtube.com/embed/jw7bRnFbwAI?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>", "provider_url": "https://www.youtube.com/", "thumbnail_url": "https://i.ytimg.com/vi/jw7bRnFbwAI/hqdefault.jpg", "type": "video", "thumbnail_height": 360, "author_url": "https://www.youtube.com/channel/UCSDtqcJ8ZXviPrEcj1vuLiQ", "version": "1.0", "thumbnail_width": 480 }
ตอนนี้เรากำลังพูดถึง! คำตอบทำให้เราได้ข้อมูลมากมายเกี่ยวกับเนื้อหา version
ในอนาคตอันใกล้ควรเป็น 1.0
ซึ่งเป็นเวอร์ชันปัจจุบันของข้อมูลจำเพาะ oEmbed ข้อมูลอื่นๆ ที่ส่งคืนขึ้นอยู่กับค่าของ type
เป็นส่วนใหญ่
ประเภทการตอบกลับ
ค่าของคีย์ type
ในการตอบกลับจะบอกคุณว่าคุณต้องการฝังสื่อประเภทใด
มูลค่า type | คาดหวังอะไร |
---|---|
photo | รูปภาพนิ่งที่มี url width และ height ที่สามารถใช้สำหรับแท็ก img พื้นฐาน |
video | โปรแกรมเล่นวิดีโอที่มี html ระบุรหัสที่จำเป็นสำหรับการฝังโปรแกรมเล่นบนหน้าเว็บ แม้ว่าจะมี width และ height |
link | วิธีที่ดีที่สุดในการจัดการกับเนื้อหานี้คือการให้ลิงก์หลังจากทั้งหมด คำตอบอาจมีข้อมูลที่เป็นประโยชน์อื่นๆ เช่น ชื่อ แต่ควรเชื่อมโยงเข้าด้วยกัน |
rich | โปรแกรมเล่นเนื้อหาที่หลากหลายซึ่งเหมือนกับประเภทวิดีโอส่งคืน html , width และ height |
นอกจากเนื้อหาวิดีโอโดยเฉพาะแล้ว ประเภททั่วไปที่คุณน่าจะเห็นในป่ายังมีเนื้อหา rich
แม้แต่ Flickr เองในขณะที่ยังคงส่งการตอบกลับ photo
ก็ยังให้ html
สำหรับ 'ผู้เล่น' ที่ฝังไว้สำหรับรูปภาพด้วยเช่นกัน
โดยส่วนใหญ่ การฝังเนื้อหาในไซต์ของคุณเป็นเพียงกรณีของการใช้โค้ดที่ให้ไว้เป็นค่า html
หมายเหตุเกี่ยวกับความปลอดภัย
สิ่งหนึ่งที่คุณอาจระมัดระวังอย่างเหมาะสมก็คือการตอบกลับ HTML และฝังไว้ในหน้าเว็บที่คุณโฮสต์โดยทางโปรแกรม หากไม่มีขั้นตอนของมนุษย์ในการตรวจสอบโค้ดที่คุณวางซ้ำอีกครั้ง โค้ดนั้นก็อาจเป็นอันตรายได้เสมอ ดังนั้นคุณควรดำเนินการตามขั้นตอนที่เหมาะสมเพื่อลดความเสี่ยง
ซึ่งอาจรวมถึงการกรอง URL เพื่อให้แน่ใจว่าแบบแผนและโดเมนตรงกับที่คาดไว้ และโค้ดแซนด์บ็อกซ์ลงใน iframe บนโดเมนอื่นที่ไม่มีคุกกี้ คุณควรเข้าถึงสถานการณ์ที่คุณกำลังใช้รหัส และตรวจสอบให้แน่ใจว่าคุณไม่ได้เปิดเผยตัวตนของคุณต่อความเสี่ยงที่เกินควร
เริ่มต้น
สิ่งสำคัญคือการเข้าใจกระบวนการเมื่อใช้ oEmbed ความจริงก็คือภาษาทั่วไปส่วนใหญ่มีไลบรารีที่พร้อมใช้งานซึ่งแยกกระบวนการออกและทำให้ค่อนข้างง่าย
ตัวอย่างเช่น npm packaged oembed จัดเตรียมอินเทอร์เฟซที่ง่ายมากสำหรับการร้องขอตาม URL ของเนื้อหาและรับการตอบกลับ oEmbed กลับมา
ขั้นแรกให้ติดตั้งแพ็คเกจในโครงการของคุณ:
npm i oembed
แล้วขอ URL ฉันใช้ URL ของงานนำเสนอใน Notist ที่ฉันให้ไว้เกี่ยวกับ oEmbed เมต้ามากขนาดไหน
const oembed = require('oembed'); const url = 'https://noti.st/drewm/ZOFFfI'; oembed.fetch(url, { maxwidth: 1920 }, function(error, result) { if (error) console.error(error); else console.log("oEmbed result", result); });
และคำตอบ:
{ type: 'rich', version: '1.0', title: 'Understanding oEmbed', author_name: 'Drew McLellan', author_url: 'https://noti.st/drewm', provider_name: 'Notist', provider_url: 'https://noti.st', cache_age: 604800, thumbnail_url: 'https://on.notist.cloud/slides/deck4179/large-0.png', thumbnail_width: 1600, thumbnail_height: 900, html: '<p data-notist="drewm/ZOFFfI">View <a href="https://noti.st/drewm/ZOFFfI">Understanding oEmbed</a> on Notist.</p><script async src="https://on.notist.cloud/embed/002.js"></script>', width: 960, height: 540 }
หากคุณต้องการทำเช่นเดียวกันใน PHP คุณสามารถติดตั้งแพ็คเกจที่ใช้งานสะดวกที่เรียกว่า embed/embed ผ่าน Composer
composer require embed/embed
จากนั้นในโครงการ PHP ของคุณ:
use Embed\Embed; $info = Embed::create('https://noti.st/drewm/ZOFFfI'); $info->title; // "Understanding oEmbed" $info->authorName; // "Drew McLellan $info->code; // "<p data-notist="drewm/ZOFFfI"> ... </script>"
อย่างที่คุณเห็น ด้วยการใช้ไลบรารี กระบวนการจะกลายเป็นเรื่องง่ายมาก และคุณสามารถรับจาก URL ไปยังโค้ดฝังตัวได้อย่างรวดเร็ว พร้อมที่จะแสดงการนำเสนอเนื้อหาของผู้ใช้ที่หลากหลาย
บทสรุป
oEmbed เป็นวิธีแก้ปัญหาที่หรูหรามากสำหรับปัญหาที่เฉพาะเจาะจงมาก คุณจะได้รับการอภัยเพราะคิดว่ามีวิศวกรเพียงไม่กี่คนที่ทำงานในเครือข่ายโซเชียลขนาดใหญ่เท่านั้นที่จะได้รับประโยชน์จากสิ่งนี้ แต่ในความเป็นจริง ระบบการเผยแพร่ที่ผู้ใช้อาจป้อน URL นั้นเป็นเรื่องปกติธรรมดาอย่างน่าประหลาดใจ หาวิศวกรส่วนหลังสักคนหนึ่งที่ไม่จำเป็นต้องสร้าง CMS บางประเภทให้ฉัน เราอาจไม่ได้คิดในแง่เดียวกัน แต่ถ้าคุณยอมรับอินพุตของผู้ใช้ คุณควรคิดว่าจะทำอย่างไรถ้าอินพุตนั้นมี URL
ตอนนี้คุณรู้เกี่ยวกับ oEmbed แล้ว (ขออภัย) คุณไม่มีข้อแก้ตัวที่จะไม่พิจารณาวิธีจัดการ URL ในโครงการในอนาคตของคุณอย่างจริงจัง
- oEmbed ข้อมูลจำเพาะ
- oembed สำหรับ NodeJS
- ฝัง/ฝังสำหรับ PHP
- “ประกาศ OEmbed: มาตรฐานเปิดสำหรับเนื้อหาแบบฝัง” Leah Culver