Khi oEmbed thất bại, hiển thị một thay thế


8

Tôi muốn chỉ định một hình ảnh thay thế sẽ được hiển thị khi oEmbed thất bại.

Trường hợp sử dụng cụ thể là cung cấp giải pháp thay thế khi Trung Quốc (hoặc các quốc gia khác) chặn YouTube. Chúng tôi biết nội dung YouTube sẽ không có sẵn ở đó, nhưng muốn cung cấp hình ảnh thay thế trong trường hợp đó.

Mã lỗi oEmbed có thể được truy cập cho mục đích này không?


Câu hỏi rất thú vị. Thật không may, tôi không có anwer cho bạn, nhưng đây chắc chắn là một cái gì đó đáng để xem xét.
Pieter Goosen

1
Tôi đã xem xét vấn đề này. Tôi đã đi khá sâu nhưng tôi không tìm thấy giải pháp nào. Vấn đề là yêu cầu oEmbed được thực hiện từ máy chủ web chứ không phải từ phía khách hàng. Trong máy chủ, mọi thứ đều ổn và HTML nhúng được YouTube trả về; đó là iframe tải video. Khi khách hàng cố tải nội dung iframe, là khi nội dung bị chặn. Theo như tôi có thể hiểu, oEmbed không thất bại và chúng ta không thể làm gì hoặc rất ít. Mong đợi những gì người khác nghĩ về điều này.
cybmeta

Tôi nghĩ, không chắc chắn, API của oembed hoạt động về API RESTful. API này trả về câu trả lời cho khách hàng như thế này GET /photos/bees/2362225867/ HTTP/1.1 Host: flickr.com Accept: application/oembed+xml. Thay thế là mặc định để nhận mã http lỗi, như 406 Không được chấp nhận. Điều này sẽ hữu ích để trả lại một tin nhắn.
bueltge

@bueltge câu trả lời trả về từ oEmbed không được gửi cho khách hàng. Không ít nhất là cho YouTube như tôi đã nói trong bình luận của tôi. Yêu cầu oEmbed được thực hiện phía máy chủ, YouTube trả về <iframe>HTML và đó là những gì được nhúng trong bài đăng và đó là những gì máy chủ cho khách hàng: a <iframe>. Khi khách hàng từ Trung Quốc cố gắng tải nội dung của <iframe>nó là khi nó bị chặn. Không có gì liên quan đến máy chủ. Tôi chưa từng thử nghiệm với các nhà cung cấp oEmbed khác nhưng tôi nghĩ tất cả họ đều hoạt động theo cách tương tự. Trong thực tế, nếu oEmbed sẽ được thực hiện phía khách hàng thì sẽ không có bất kỳ nội dung thực sự nào được nhúng.
cybmeta

1
Cách thay thế duy nhất tôi thấy là kiểm tra nội dung được nhúng bằng javascript. nếu bạn không nhận được iframe video, bạn có thể hiển thị thứ khác ...
jjarolim

Câu trả lời:


1

Tôi nghĩ rằng điều tốt nhất để làm trong trường hợp này là bọc nội dung oEmbed của bạn divtrước khi chúng được hiển thị và sau đó hiển thị hình ảnh thay thế với thuộc tính CSS background-image. Nếu video tải, thì nội dung oEmbed sẽ che hình ảnh nền.

Bạn có thể thêm trình bao bọc bằng embed_oembed_htmlbộ lọc.

add_filter('embed_oembed_html', 'your_function_here');

Nếu bạn lo lắng về việc tải các phần tử bổ sung, thì bạn có thể thực hiện kiểm tra phía máy khách với JS để xem liệu oEmbed đã tải chưa và nếu không, hãy tải hình ảnh nền vào trình bao bọc.

Bạn có thể phức tạp hơn nhiều bằng cách thêm vào các trường tùy chỉnh cho mỗi video, nhưng về cơ bản đó là ý chính của nó.


0

Một cách tiếp cận có thể là thực hiện một yêu cầu khác bằng cách sử dụng oEmbed ở phía máy chủ thông qua proxy có trụ sở tại Trung Quốc.

Bằng cách này, bạn sẽ biết trước nếu cuộc gọi đến tài nguyên trên máy khách sẽ thất bại. Yêu cầu sớm về trang bạn có thể xác định vị trí IP của máy khách được đặt theo địa lý, thực hiện cuộc gọi phía máy chủ qua proxy đến tài nguyên, ví dụ như youtube và sau đó tận dụng lỗi oEmbed mà bạn có thể gặp phải.

Bạn có thể xem Wonderproxy để đạt được điều này (Tôi không liên kết với họ nhưng nghe những điều tốt đẹp)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.