Ketika oEmbed gagal, tampilkan alternatif

8

Saya ingin menentukan gambar alternatif yang akan ditampilkan ketika oEmbed gagal.

Kasus penggunaan khusus adalah untuk menawarkan alternatif ketika China (atau negara lain) memblokir YouTube. Kami tahu konten YouTube tidak akan tersedia di sana, tetapi ingin memberikan gambar alternatif dalam kasus itu.

Apakah kode kesalahan oEmbed dapat diakses untuk tujuan ini?

Bob Easton
sumber
Pertanyaan yang sangat menarik. Sayangnya saya tidak memiliki jawaban untuk Anda, tetapi ini jelas sesuatu yang layak untuk diteliti.
Pieter Goosen
1
Saya telah melihat ke dalam masalah ini. Saya sudah cukup dalam tetapi saya belum menemukan solusi. Masalahnya adalah bahwa permintaan oEmbed dilakukan dari server web, bukan dari sisi klien. Di server semuanya OK dan HTML embed dikembalikan oleh YouTube; yaitu, iframe yang memuat video. Ketika klien mencoba memuat konten iframe, adalah ketika konten diblokir. Sejauh yang saya bisa mengerti, oEmbed tidak gagal dan tidak ada atau sangat sedikit yang bisa kita lakukan. Mengharapkan apa yang orang lain pikirkan tentang ini.
cybmeta
Saya pikir, tidak yakin, API hasil karya tentang RESTful API. API ini mengembalikan jawaban ke klien seperti ini GET /photos/bees/2362225867/ HTTP/1.1 Host: flickr.com Accept: application/oembed+xml. Alternatif adalah default untuk mendapatkan kode http kesalahan, seperti 406 Tidak Dapat Diterima. Ini harus bermanfaat untuk mengembalikan pesan.
bueltge
@bueltge jawaban yang dikembalikan dari oEmbed tidak dikirim ke klien. Paling tidak untuk YouTube seperti yang saya katakan di komentar saya. Permintaan oEmbed dilakukan di sisi server, YouTube mengembalikan <iframe>HTML dan itulah yang dimasukkan dalam pos dan itulah yang merupakan server untuk klien: a <iframe>. Ketika klien dari Cina mencoba memuat konten <iframe>adalah ketika diblokir. Tidak ada sisi server yang terlibat. Saya belum diuji dengan penyedia oEmbed lain tapi saya pikir mereka semua bekerja dengan cara yang sama. Bahkan, jika oEmbed akan dilakukan sisi klien tidak akan ada konten nyata yang ditanamkan.
cybmeta
1
Satu-satunya alternatif yang saya lihat adalah memeriksa konten yang disematkan dengan javascript. jika Anda tidak mendapatkan video iframe, Anda dapat menampilkan sesuatu yang lain ...
jjarolim

Jawaban:

1

Saya pikir hal terbaik untuk dilakukan dalam hal ini adalah membungkus konten oEmbed Anda dengan divsebelum mereka diberikan dan kemudian menunjukkan gambar alternatif dengan background-imageproperti CSS . Jika video dimuat, maka konten oEmbed akan menutupi gambar latar belakang.

Anda dapat menambahkan pembungkus menggunakan embed_oembed_htmlfilter.

add_filter('embed_oembed_html', 'your_function_here');

Jika Anda khawatir tentang memuat elemen tambahan, maka Anda dapat melakukan pemeriksaan sisi klien dengan JS untuk melihat apakah oEmbed dimuat, dan jika tidak, muat gambar latar belakang ke dalam pembungkus.

Anda bisa menjadi jauh lebih rumit dengan menambahkan bidang khusus untuk setiap video, tetapi itulah intinya.

Daron Spence
sumber
0

Salah satu pendekatan mungkin untuk membuat permintaan lain menggunakan oEmbed di sisi server melalui proxy yang berbasis di Cina.

Dengan cara ini Anda akan tahu sebelumnya jika panggilan ke sumber daya pada klien akan gagal. Pada awal halaman permintaan Anda dapat memastikan di mana IP klien berada secara geografis, melakukan panggilan sisi server melalui proxy ke sumber daya misalnya youtube dan kemudian memanfaatkan kesalahan oEmbed Anda mungkin akan mendapatkan.

Anda bisa melihat Wonderproxy untuk mencapai ini (saya tidak berafiliasi dengan mereka tetapi mendengar hal-hal baik)

codecowboy
sumber