「GYAO!」に関する述懐 

動画サイト「GYAO!」に関して、これまでにサイト全体をアレンジするCSSスタイル「GYAO動画のフル画面表示」と、動画に表示されるADをOFFにする JavaScriptツール「Gyao! AD Skip」を作りました。 以下がそれらの最終記事です。

 

 

 

これらは現在も利用できますが、どちらも理想的とは言い難いものです。

 

「GYAO動画のフル画面表示」のCSSコードはかなり陳腐化している事が判って来ました。「GYAO!」サイトは大がかりでアレンジを徹底できず、サイトデザインの更新に追いついて行けない部分が出て来ます。 要所に絞り、細かな点に拘らないアレンジが求められますが、再アレンジはごっついしんどいです。

 

一方の「Gyao! AD Skip」は、試みの域を出ないものです。 高度な技術の基礎がある「uBlock Origin」等を使い始めると、汎用動画プレーヤーでのブロック技術にはとても追いつかないと感じます。

 

 

 

簡単な快適化ツール 

今回手がけたのは、動画サイズの拡大を自動で行うツールです。「GYAO!」をよく閲覧される方はご存知と思いますが、動画スタートの「」ボタンを押さないと、動画サイズを全画面にする「   」ボタンが表示されません。 シリーズ動画を続けて見る様な場合は、毎回このボタンを押すのが不便です。

 

 

 

小さな事ですが、これはスクリプトで自動で全画面表示に出来るのではと、コードを書いて見ると上手く行きました。

 

最初は「Gyao! AD Skip」に追加する事を考えましたが、自分が使わないツールをお勧め出来ません。 で、ほんの数行のコードというのもなんなので、これは「GYAO動画のフル画面表示」と合体させる事を考えました。

 

実は最近、「Stylus」のスタイル適用の速度に、ほぼ見劣りしないコードが作れる様になっています。 このコードを拡張機能としてコンパイルすれば、多分「Stylus」と同等の適用速度になると思っています。

 

それを再確認する意味もあり、複数セクションの「GYAO動画のフル画面表示」のCSSを、JavaScript版に移植する事にしました。「Gyao! Comfy」は、サイトデザインのアレンジと合体した環境ツールとすれば、恰好が付くというわけです。

 

 

ツールの内容

「GYAO動画のフル画面表示」のセクション構成は以下です。

〔追記〕2022.03.09 ver. 202203.08.01 から 6セクションに変更しています。

 

  1 GYAO動画のフル画面表示 ver. 202203.03.01

  2 共通設定

  3 共通設定

  4 個別の動画ページ 基本表示

  5 動画プレーヤー

  6 動画プレーヤー

  7 特設ページの修復

 

GYAO! サイト全体のアレンジは「1,2,3」のセクションで行い、「4,5,6」が動画表示ページのアレンジです。 このスタイルは特に、サブウインドウで動画を表示する事に注力していて、それが「5,6」のコードです。

 

「Gyao! Comfy」は、自動的に「全画面表示」にする機能が主で、サブウインドウでの表示は目的外です。 そのため「5,6」は採り入れず、他のセクションを移植する事にしました。

 

以下は、1つのセクションのコードの雛形ですが、太字は適用ページを「path名」で選別する機能です。 これは「Stylus」の適用先の指定に相当します。

 

let path=document.location.pathname;
if(path.match(/^\/ranking|^\/arrivals|^\/titles/)){

    let css=
        '<style id="GC" type="text/css">'+
        '.tab .tab-title > span { color: #000; }'+
                            :                      
                       ( 略 )
                            :
        'html { overflow: overlay; overflow-x: hidden; }</style>';

    if(!document.querySelector('#GC')){
        document.documentElement.insertAdjacentHTML('beforeend', css); }}

 

スタイルのCSSコードをコピーして、styleタグに変え、最後の2行で「html」に埋め込みます。 この様なコードを、適用するセクションの数だけ実行します。

 

 

制作の進捗 

目的の通りの動作は、比較的簡単に実現しました。 ただ、CSSコードを移植していると、現在はクラス名が一致せずに無効なコードが散見され、元の「GYAO動画のフル画面表示」の更新が必要と判って来ました。

 

これは、かなり手間なチェックが必要で、このページの「Gyao! Comfy」は、更新前のコードを使っています。 今後、「GYAO動画のフル画面表示」も「Gyao! Comfy」も、CSSコードの更新が必要です。

 

 

 

 「Gyao! Comfy」を利用するには

このツールは Chrome / Edge / Firefox版の拡張機能「Tampermonkey」上で動作します。 以下に、このツールの導入手順を簡単に説明します。

 

未だ全てが完全ではありませんが、動画のスタートボタンの機能はテストできます。

 

❶「Tampermonkey」を導入します

◎ 使用しているブラウザに拡張機能「Tampermonkey」を導入する事が必要です。

既に「Tampermonkey」を導入している場合は、この手順 ❶ は不要です。 

拡張機能の導入については、以下のページに簡単な説明があるので参照ください。

 

 

❷「Tampermonkey」にスクリプトを登録します

◎「Tampermonkey」の「」マークの「新規スクリプト」タブを開きます。

 

 

 

◎「新規スクリプト」には、最初からテンプレートが記入されています。 これは全て削除して、完全に空白の編集枠に 下のコードをコピー&ペーストします。

 

〔コピー方法〕 軽量シンプルなツール「PreBox Button   」を使うと

  コード枠内を「Ctrl+左Click」➔「Copy code 」を「左Click」

  の操作で、掲載コードのコピーが可能になります。

 

◎ 最後に「ファイル」メニューの「保存」を押すと、ツールが使用可能になります。

 

 

〔 Gyao! Comfy 〕 ver. 0.1

 

// ==UserScript==
// @name         Gyao! Comfy
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description   Gyao! 動画の「▶」のクリックで全画面表示
// @author       You
// @match        https://gyao.yahoo.co.jp/*
// @grant        none
// ==/UserScript==


let target_g=document.querySelector('.gyao-player'); // 監視 target
if(target_g){ // 通常動画のコンテンツ表示時に動作
    let monitor_g=new MutationObserver(wider);
    monitor_g.observe(target_g, {childList: true, subtree: true}); // 監視開始

    function wider(){
        let play_button=document.querySelector('.vjs-big-play-button');
        let full_cont=document.querySelector('.vjs-gyao .vjs-fullscreen-control');
        if(play_button && full_cont){
            play_button.onclick=function(){
                full_cont.click(); }}

        let progress=document.querySelector('.vjs-play-progress');
        progress.style.backgroundColor='#29b6f6'; // シークバーを青色にする

    }} // 通常動画のコンテンツ表示時



let css1=
    '<style id="GC1" type="text/css">'+
    '/* GYAO 全ページ共通のスタイル ******************/'+
    '/* 基本配色 */'+
    ':root { --back: #91b4bf; --hove: #b9cfd6; }'+
    '/* ページ背景色 =全ページ共通= */'+
    'html, body { background: var(--back); }'+
    '/* GYAOヘッダー */'+
    '.header .header-global { height: 44px; }'+
    '.header .header-left-container { height: 44px; }'+
    '.header .header-logo-gyao { height: 20px; }'+
    '.header .search-suggest .search-suggest-input, .header .search-suggest .search-suggest-search-button { height: 36px; }'+
    '.header .header-right-container { line-height: 44px; }'+
    '.header .header-button { font-size: 1.2rem; font-weight: normal; }'+
    '.header .header-button img { width: 24px; height: 24px; }'+
    '.header .header-menu-button .header-menu-button-text { font-size: 1.2rem; font-weight: normal; }'+
    '/* ウォッチリストに追加するボタン =全ページ共通= */'+
    '.button-favorite { opacity: .6; }'+
    '.button-favorite:hover { opacity: .8; }'+
    '.button-favorite .button-favorite-text { color: #000; }'+
    '/* 横スライド枠 ボタンデザイン =全ページ共通= */'+
    '.arrow-button_arrowButton__aMtur:focus, .arrow-button_arrowButton__aMtur { box-shadow: inset 0 0 0px 4px #fff; }'+
    '/* 動画一覧アイテム 説明 =全ページ共通= */'+
    '.item-carousel .item-carousel-item-details { background-color: transparent; }'+
    '.item-carousel-item:hover { background: var(--hove); }'+
    '/* 更新カレンダー =全ページ共通= */'+
    '.schedule-list-item { padding: 0 6px; }'+
    '.schedule-list-item:hover { background: var(--hove); }'+
    '.schedule-list-item-sub-text { color: #000 !important; }'+
    '.schedule-list-container h3 { border-top: 1px solid #f0f0f0; }'+
    '.schedule-list .schedule-list-row-item:not(:last-child) { padding-right: 0; }'+
    '.schedule-list .schedule-list-row-item { border: none !important; }'+
    '.schedule-list .schedule-list-row-item h3, .schedule-list .schedule-list-row-item ul { '+
    'border-left: 1px solid #f0f0f0; border-right: 1px solid #f0f0f0; }'+
    '/* ジャンル・サブジャンル  =全ページ共通= */'+
    '.category-item:hover { background: var(--hove); }'+
    '.categories .category-item:nth-child(3n+1) { border-left: 1px solid #f0f0f0; }'+
    '.categories .category-item:nth-child(3n) { border-right: 1px solid #f0f0f0; }'+
    '/* インフォメーション =全ページ共通= */'+
    '.item-list-item { padding: 0 8px; }'+
    '.item-list-item:hover { background: var(--hove); }'+
    '.item-list-item-sub-text { color: #000 !important; }'+
    '/* もっと見る =全ページ共通= */'+
    '.more-link .more-link-text { color: #000; }'+
    '.more-link .more-link-text:active, .more-link .more-link-text:hover { color: #fff; filter: brightness(400%); }'+
    '/* 末尾 パンクズリスト =全ページ共通=  */'+
    '.breadcrumb .breadcrumb-list-item-link, .breadcrumb '+
    '.breadcrumb-list-item:last-child .breadcrumb-list-item-link { color: #000; }'+
    '/* ヤフーADブロック =全ページ共通= */'+
    '.ad.ad-yads { display: none !important; }'+
    '/* 読込みの無いサムネイル */'+
    '.image-lazy { background-color: #90aeb7; }'+
    '/* スクロールバーデザイン(Chromeのみ)=全ページ共通= */'+
    'html::-webkit-scrollbar { width: 16px; }'+
    'html::-webkit-scrollbar-thumb { background: #000; border: 1px solid var(--back); border-right: none; }'+
    'html::-webkit-scrollbar-track { background: transparent; }'+
    '/* スクロールバーデザイン(Firefoxのみ)=全ページ共通= */'+
    'html { scrollbar-color: #000 transparent; }'+
    'html { overflow: overlay; overflow-x: hidden; }</style>';

if(!document.querySelector('#GC1')){
    document.documentElement.insertAdjacentHTML('beforeend', css1); }



let path=document.location.pathname;
if(path.match(/^\/ranking|^\/arrivals|^\/titles|^\/search|^\/schedule/)){

    let css2=
        '<style id="GC2" type="text/css">'+
        '/* 共通設定 **********************************/'+
        '/* カテゴリ セレクタ */'+
        '.tab .tab-title > span { color: #000; }'+
        '.tab .tab-title.is-active { background: none; }'+
        '.tab .tab-title:active > span, .tab .tab-title:focus > span, .tab .tab-title:hover > span { color: #000; }'+
        '/* オプション セレクタ */'+
        '.option-selector .option-selector-item > label { color: #000; }'+
        '.option-selector .option-selector-item > input:hover + label { color: #000; }'+
        '/* 動画一覧リスト */'+
        '.program-list .program-list-item-title { color: #000; }'+
        '.program-list .content-label { color: #000; }'+
        '.program-list .program-list-item-sub-text { color: #000; }'+
        '/* 検索結果ページの追記 */'+
        '.search-rental-result-information.search-rental-result-information-lazy.is-active { background: var(--hove); }'+
        '.search-rental-result-information .search-rental-result-information-text { color: #000; }'+
        '/* スクロールバーデザイン(Chromeのみ)*/'+
        'html::-webkit-scrollbar-thumb { background: rgba(0, 0, 0, .2); }'+
        '/* スクロールバーデザイン(Firefoxのみ)*/'+
        'html { scrollbar-color: rgba(0, 0, 0, .2) transparent; }</style>';

    if(!document.querySelector('#GC2')){
        document.documentElement.insertAdjacentHTML('beforeend', css2); }}



if(path.match(/^\/special\/gyao_latest\/|^\/coming-soon|^\/selection\/|^\/list\//)){

    let css3=
        '<style id="GC3" type="text/css">'+
        '/* 共通設定 **********************************/'+
        '.container-two-column-right { width: 0 !important; }'+
        '/* 注目の配信ラインナップ specialのページ */'+
        '#cnt h2 { color: #fff; font-size: 24px; font-weight: bold !important; }'+
        '#cnt P, #cnt h5 { font-weight: bold !important; }'+
        '#cnt h5 { color: #000; }'+
        '.thumb .time_left, .thumb .duration { color: #fff; }'+
        '/* 配信のラインナップ */'+
        '.frame_layer .module_accordion a { color: #fff; font-weight: bold; }'+
        '#cnt h3 { color: #fff; font-weight: bold !important; }'+
        '.accordion_content p { color: #000 !important; }'+
        '/* 配信予定 coming-soonのページ */'+
        '.coming-soon-list.section { margin: 0 auto; }'+
        '.item-list .datetime { color: #000; }'+
        '.item-list .item-list-item-sub-text { color: #000; }'+
        '.item-list-item.item-list-item-nomatch { color: #000; }'+
        '/* もっと見る */'+
        '.item-list-more-link { background-color: var(--hove) !important; }'+
        '/*音楽カテゴリ selectionのページ */'+
        '.selection-header-description-text { color: #000 !important; }'+
        '.selection-list .item-list { margin: 0 auto; }'+
        '/* 注目の特集 listのページ */'+
        '#delimiter_wrapper, #main_cnt_wrapper { background: none; }'+
        '#delimiter li, #delimiter li a { color: #000 !important; }'+
        '#main_cnt { color: #fff; }'+
        '#im, #rightcnt, #footer { display: none; }'+
        '/* スクロールバーデザイン(Chromeのみ)*/'+
        'html::-webkit-scrollbar-thumb { background: rgba(0, 0, 0, .2); }'+
        '/* スクロールバーデザイン(Firefoxのみ)*/'+
        'html { scrollbar-color: rgba(0, 0, 0, .2) transparent; }</style>';

    if(!document.querySelector('#GC3')){
        document.documentElement.insertAdjacentHTML('beforeend', css3); }}



if(path.match(/^\/p\/|^\/player\/|^\/episode\/|^\/title\//)){

    let css4=
        '<style id="GC4" type="text/css">'+
        '/* 個別の動画ページ 基本表示 *********************/'+
        '/* 左列  */'+
        '/* ロールダウンするサムネイル動画とタイトル */'+
        '.video-player.is-pip .video-player-titles { background-color: #223e4c; }'+
        '.video-player.is-pip .video-player-titles p { color: #ccc; }'+
        '.video-player.is-pip .video-player-titles:after { content: "▲"; position: absolute; right: 20px; bottom: 15px; '+
        'font: normal 32px/40px Meiryo; text-indent: 6px; color: #fff; display: block; height: 50px; width: 50px; '+
        'border: 3px solid #fff; border-radius: 50%; }'+
        '/* 動画配信期間 */'+
        '.video-information .datetime { color: #000; }'+
        '/* 動画情報 */'+
        '.video-descriptions .video-description-main, .program-descriptions .program-description-main { color: #000; }'+
        '.video-descriptions .content-text, .program-descriptions .content-text { color: #000; }'+
        '/* 動画情報表示 背景グラデュエーション */'+
        '.container-clipper .container-clipper-content::after { '+
        'background: linear-gradient(to bottom, rgba(255, 255, 255, 0), #b9cfd6); height: 50px; }'+
        '/* 映像一覧 もっと見る */'+
        '.video-list-more { background: var(--hove); }'+
        '/* もっと見たいあなたへのおすすめ */'+
        '.item-tile .item-tile-item-details { background: none; }'+
        '.item-tile-item-link:hover { background: var(--hove); }'+
        '/* レビューを投稿する */'+
        '.button.type-primary-white { background: var(--hove); }'+
        '.button.type-primary-white:hover { background: #c2edfb; }'+
        '/* 役にたった */'+
        '.button.type-secondary { background: var(--hove); }'+
        '.button.type-secondary:hover { background: #c2edfb; }'+
        '.review-list-item-header-post-info .datetime { color: #000; }'+
        '.review-list .review-list-item-content-text { color: #000; }'+
        '.review-list-item-content-interstitial { color: #000 !important; background: var(--hove); }'+
        '.review-list-more { background: var(--hove); }'+
        '/*検索 オーバーレイ ダイアログ */'+
        '.search-suggest.search-suggest-core .search-suggest-container { background-color: rgba(11, 45, 62, 0.7); }'+
        '.search-suggest.search-suggest-core .search-suggest-close-button { font-size: 1.4rem; color: #fff; }'+
        '/* 右列 */'+
        '/* 右リスト選択部 */'+
        '.video-list .video-list-item { padding: 0 4px; }'+
        '.video-list .video-list-item:hover { background-color: var(--hove); }'+
        '.video-list .video-list-item.is-current { background-color: var(--hove); }'+
        '.video-list .video-list-item-titles time { color: #000; }'+
        '.video-list .video-list-item-sub-text { color: #000; }'+
        '.section-upsell-item { padding: 0 4px; }'+
        '/* Cookei許諾 */'+
        '.section.thirdparty-cookie-information p { color: #000; }'+
        '/* 右リスト AD */'+
        '.ad-banner.ad.section { display: none; }'+
        '/* フッター部 AD */'+
        '.to-app-banner.to-app-banner-footer, .footer-aside.footer-container { display: none; }'+
        '/* スクロールバーデザイン(Chromeのみ)*/'+
        'html::-webkit-scrollbar { width: 0px; }'+
        '/* スクロールバーデザイン(Firefoxのみ)*/'+
        'html { scrollbar-width: none; }</style>';

    if(!document.querySelector('#GC4')){
        document.documentElement.insertAdjacentHTML('beforeend', css4); }}



if(path.match(/^\/specials\/|^\/special\/list/)){

    let css7=
        '<style id="GC7" type="text/css">'+
        '/* 特設ページの修復 **************************/'+
        '/* special/list */'+
        'body { font-family: "メイリオ", Meiryo, sans-serif !important; }'+
        'main h2 { color: #fff; }'+
        '/* specials/ */'+
        '#cnt p > a, #cnt h3 { font-family: Meiryo; color: #fff; }'+
        '.app-frame_navigationMenu__bt79L, .navigation-menu_section__3NmVQ { width: 240px; }'+
        '#cnt div:not(.video-js):not(.module_visual_header) p { font-family: Meiryo; color: #fff; }'+
        '#cnt .frame_layer { font-family: Meiryo; }</style>';

    if(!document.querySelector('#GC7')){
        document.documentElement.insertAdjacentHTML('beforeend', css7); }}