oEmbedとは
今回はoEmbedという仕組みを使ってサムネイルを取得していきます。
oEmbedは動画サイトやSNSのコンテンツ情報を取得する仕組みで、
サムネイルの他、タイトルなどの文字情報も取得できます。
oEmbedは統一規格のため、YouTubeやTwitterなど、oEmbedを使用しているサービスなら同じようにoEmbedで情報を取得できます。
コード
oEmbedの基本は、パラメータ付きのURLにアクセスし、JSONデータを取得するということです。
今回は、フォームに貼り付けられたURLからサムネイルを取得するサンプルを作ります。
次のコードは、HTMLです。
Vue.jsを使っているのは、入力が終わったタイミングで処理を実行したいためです。
処理はAjaxを使っています。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Screen-shot</title> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <script src="//cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> </head> <body> <div id="input_url_wrap"> <input type="text" v-model="input_url" id="input_url"> </div> <div id="result"></div> <script> $(function(){ var result = $('#result'); var input_url = new Vue({ el: '#input_url_wrap', data: { input_url: '' }, watch: { input_url: function(){ //入力したら実行 $.ajax({ url: 'getImage.php', type: 'post', dataType: 'json', data: {input_url: $('#input_url').val()}, }) .done(function(data) { console.log("success"); result.append('<img src="download/'+data+'">'); }) .fail(function() { console.log("error"); }) .always(function() { console.log("complete"); }); } } }); }); </script> </body> </html>
次のコードはフォームのデータを処理するPHPです。
getImage.phpという名前で保存すれば、上のフォームと繋がります。
<?php $input_url = htmlspecialchars( $_POST['input_url'] ); $img = ''; //ランダムな保存名 $filename = sha1(uniqid(rand(), true)) . '.jpg'; //保存先ファイルパス $file_path = './download/'; if( strpos($input_url, 'vimeo.com') !== false ){ //vimeoの動画ID取得 preg_match("/vimeo\.com\/(\w+)/", $input_url, $thumb_id); //vimeoのサムネイルURL取得 $vimeo_json = "https://vimeo.com/api/oembed.json?url=https%3A//vimeo.com/" . $thumb_id[1]; $vimeo_json = file_get_contents($vimeo_json); $vimeo_json = mb_convert_encoding($vimeo_json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN'); $vimeo_data = json_decode($vimeo_json, true); $img = $vimeo_data['thumbnail_url']; }elseif( strpos($input_url, 'dailymotion.com') !== false ){ //dailymotionの動画ID取得 preg_match("/dailymotion\.com\/video\/(\w+)/", $input_url, $thumb_id); //dailymotionのサムネイルURL取得 $dm_json = "https://api.dailymotion.com/video/" . $thumb_id[1] . "?fields=thumbnail_large_url"; $dm_json = file_get_contents($dm_json); $dm_data = json_decode($dm_json, true); $img = $dm_data['thumbnail_large_url']; } //URLからコンテンツを取得 $data = file_get_contents($img); //保存 file_put_contents($file_path . $filename, $data); echo json_encode($filename); ?>
最後に、downloadという名前で保存用ディレクトリも作っておきましょう。
フォームに動画URLをコピペしてみて、保存された画像が表示されれば成功です。