/** * 構造化データ (Schema.org) ビルダーヘルパー * * 動画データから VideoObject の連想配列を組み立てる共通処理。 * チャンネルトップ (channel-popular-list / channel-latest-list) と * 一覧ページ (channel-popular-videos / channel-videos) の両方で同一仕様を使う。 */ if ( ! function_exists( 'build_schema_video_object' ) ) { /** * 動画データ配列から Schema.org VideoObject 形式の連想配列を生成する。 * * @param array $video get_video_data() / get_channel_cache_data() で取得した動画データ * @param string $channel_id 親チャンネル ID (URL 組み立て用) * * @return array|null video_id が空なら null */ function build_schema_video_object( $video, $channel_id ) { if ( empty( $video['video_id'] ) ) { return null; } $desc_parts = array(); $desc_parts[] = '再生回数' . number_format( $video['video_view'] ) . '回'; $desc_parts[] = 'いいね' . number_format( $video['video_like'] ) . '件'; $desc_parts[] = 'コメント' . number_format( $video['video_comment'] ) . '件'; if ( ! empty( $video['video_published_at'] ) ) { $desc_parts[] = '投稿日' . date( 'Y/m/d', $video['video_published_at'] ); } // Duration: 6-digit HHMMSS → ISO 8601 $iso_duration = ''; if ( ! empty( $video['video_duration'] ) ) { $dur = sprintf( '%06d', $video['video_duration'] ); $h = (int) substr( $dur, 0, 2 ); $m = (int) substr( $dur, 2, 2 ); $s = (int) substr( $dur, 4, 2 ); $iso_duration = 'PT'; if ( $h > 0 ) { $iso_duration .= $h . 'H'; } if ( $m > 0 ) { $iso_duration .= $m . 'M'; } $iso_duration .= $s . 'S'; } $item_data = array( '@type' => 'VideoObject', 'name' => $video['video_title'], 'url' => 'https://digitalcreators.jp/channel/' . $channel_id . '/videos/' . $video['video_id'] . '/', 'thumbnailUrl' => 'https://img.youtube.com/vi/' . $video['video_id'] . '/maxresdefault.jpg', 'embedUrl' => 'https://www.youtube.com/embed/' . $video['video_id'], 'description' => implode( '、', $desc_parts ), 'interactionStatistic' => array( array( '@type' => 'InteractionCounter', 'interactionType' => array( '@type' => 'WatchAction' ), 'userInteractionCount' => (int) $video['video_view'], ), array( '@type' => 'InteractionCounter', 'interactionType' => array( '@type' => 'LikeAction' ), 'userInteractionCount' => (int) $video['video_like'], ), array( '@type' => 'InteractionCounter', 'interactionType' => array( '@type' => 'CommentAction' ), 'userInteractionCount' => (int) $video['video_comment'], ), ), ); if ( ! empty( $iso_duration ) ) { $item_data['duration'] = $iso_duration; } if ( ! empty( $video['video_published_at'] ) ) { $item_data['uploadDate'] = date( "Y-m-d\TH:i:s+09:00", (int) $video['video_published_at'] ); } return $item_data; } } if ( ! function_exists( 'build_channel_additional_properties' ) ) { /** * チャンネルの統計値を Schema.org additionalProperty (PropertyValue の配列) として生成する。 * チャンネルランキング(カルーセルの各ListItem)とチャンネルページ(ProfilePage の mainEntity)で共用。 * * @param array $c チャンネルデータ連想配列。channel_ranking.JP の行 / get_channel_data() の結果。 * 必要列: channel_difference_user, channel_difference_view, channel_video_view, * channel_user, channel_newest_avg_view_count, channel_newest_avg_good, * channel_newest_avg_comment, channel_newest_per_engagement。 * * @return array PropertyValue 連想配列のリスト(該当データが無い項目はスキップ)。 */ function build_channel_additional_properties( $c ) { // label => array( 列名, 値の型 )。値は表示中の項目に対応。 $map = array( '30-Day Subscriber Growth' => array( 'channel_difference_user', 'int' ), '30-Day View Count Growth' => array( 'channel_difference_view', 'int' ), 'Lifetime Channel Views' => array( 'channel_video_view', 'int' ), 'Total Channel Subscribers' => array( 'channel_user', 'int' ), 'Average Views Per Video' => array( 'channel_newest_avg_view_count', 'round' ), 'Average Likes Per Video' => array( 'channel_newest_avg_good', 'round' ), 'Average Comments Per Video' => array( 'channel_newest_avg_comment', 'round' ), 'Channel Engagement Rate' => array( 'channel_newest_per_engagement', 'rate' ), ); $props = array(); foreach ( $map as $label => $def ) { list( $col, $type ) = $def; if ( ! isset( $c[ $col ] ) || $c[ $col ] === '' || $c[ $col ] === null ) { continue; } $raw = $c[ $col ]; if ( $type === 'rate' ) { // engagement率: 保存値は比率(0.0615)なので %(6.15) に変換し unitText を付与。 $props[] = array( '@type' => 'PropertyValue', 'name' => $label, 'value' => round( (float) $raw * 100, 2 ), 'unitText' => 'PERCENT', ); continue; } $value = ( $type === 'round' ) ? (int) round( (float) $raw ) : (int) $raw; $props[] = array( '@type' => 'PropertyValue', 'name' => $label, 'value' => $value, ); } return $props; } } Creepy Nuts | YouTuberトレンド分析メディア:デジタルクリエイターズ

Creepy Nuts

新着記事

週間音楽再生回数ランキングを発表!米津玄師新曲MVに羽生結弦出演!最高難易度4回転ルッツ成功に「鳥肌立った」。Vaundy、「走れSAKAMOTO DAYS」MV出演!まさかの今田美桜も登場!
カテゴリ別人気動画人気動画

週間音楽再生回数ランキングを発表!米津玄師新曲MVに羽生結弦出演!最高難易度4回転ルッツ成功に「鳥肌立った」。Vaundy、「走れSAKAMOTO DAYS」MV出演!まさかの今田美桜も登場!

「Bling-Bang-Bang-Born」、1年で驚異の2億再生超え!Creepy Nuts、今年の大バズり楽曲が年間1位獲得!こっちのけんと「はいよろこんで」が1億再生!「ギリギリダンス」で大バズり!紅白出場内定も!【年間音楽ランキング】
カテゴリ別人気動画人気動画

「Bling-Bang-Bang-Born」、1年で驚異の2億再生超え!Creepy Nuts、今年の大バズり楽曲が年間1位獲得!こっちのけんと「はいよろこんで」が1億再生!「ギリギリダンス」で大バズり!紅白出場内定も!【年間音楽ランキング】

2024年最も再生された動画は…?年間動画ランキングを発表!!1位は話題になったあの楽曲【年間総合動画ランキング】
カテゴリ別人気動画人気動画

2024年最も再生された動画は…?年間動画ランキングを発表!!1位は話題になったあの楽曲【年間総合動画ランキング】

子どもに大人気!トミカで遊ぶ動画2000万回再生突破!おもちゃレッツゴー/Toy Let’s Goが1位獲得!Snow Man、「One」MV月間ランキング2位獲得!1ヶ月で1400万回再生突破!【月間総合ランキング】
人気動画

子どもに大人気!トミカで遊ぶ動画2000万回再生突破!おもちゃレッツゴー/Toy Let’s Goが1位獲得!Snow Man、「One」MV月間ランキング2位獲得!1ヶ月で1400万回再生突破!【月間総合ランキング】

Nissy Channel、ニューアルバム収録「Time To Party」MV公開!Nissyの世界観にツアーへの期待度アップ!中島健人、自身で作詞を手掛ける「ピカレスク」MV公開!クリスマスにリリースのファーストアルバムリード曲!DJ社長、DJふぉい解任について!意味深な歌詞にファン「なんかもう笑っちゃった」【週間音楽ランキング】
カテゴリ別人気動画人気動画

Nissy Channel、ニューアルバム収録「Time To Party」MV公開!Nissyの世界観にツアーへの期待度アップ!中島健人、自身で作詞を手掛ける「ピカレスク」MV公開!クリスマスにリリースのファーストアルバムリード曲!DJ社長、DJふぉい解任について!意味深な歌詞にファン「なんかもう笑っちゃった」【週間音楽ランキング】

アニメ【推しの子】、B小町の新曲「POP IN 2」本編映像公開!TWICE日本人メンバーユニットMISAMO、安室奈美恵の「NEWLOOK」カバーMV公開!【週間音楽人気ランキング】
人気動画

アニメ【推しの子】、B小町の新曲「POP IN 2」本編映像公開!TWICE日本人メンバーユニットMISAMO、安室奈美恵の「NEWLOOK」カバーMV公開!【週間音楽人気ランキング】

ずっと流行ってる!?「Bling-Bang-Bang-Born」TOP2独占!SnowMan 「LOVE TRIGGER」も!【3ヶ月音楽ランキング】
人気動画

ずっと流行ってる!?「Bling-Bang-Bang-Born」TOP2独占!SnowMan 「LOVE TRIGGER」も!【3ヶ月音楽ランキング】

「Bling-Barn-Barn-Born」が再生回数を独占!OP映像、パフォーマンス、コラボがTOP3にランクイン!【3ヶ月総合ランキング】
人気動画

「Bling-Barn-Barn-Born」が再生回数を独占!OP映像、パフォーマンス、コラボがTOP3にランクイン!【3ヶ月総合ランキング】

Creepy Nuts、「Bling-Bang-Bang-Born」で上位2位独占!ME:Iデビュー曲MVが1週間で1300万回再生!【月間音楽ランキング】
人気動画

Creepy Nuts、「Bling-Bang-Bang-Born」で上位2位独占!ME:Iデビュー曲MVが1週間で1300万回再生!【月間音楽ランキング】

ME:IのデビューシングルMVがダントツで1位を獲得!Creepy Nuts、阿部サダヲ主演ドラマ主題歌が人気!JO1川西が作詞・作曲した楽曲のパフォーマンス動画に注目!【週間音楽ランキング】
人気動画

ME:IのデビューシングルMVがダントツで1位を獲得!Creepy Nuts、阿部サダヲ主演ドラマ主題歌が人気!JO1川西が作詞・作曲した楽曲のパフォーマンス動画に注目!【週間音楽ランキング】

Creepy Nutsの「Bling-Bang-Bang-Born」人気すぎてTOP2独占…!オーディションを生き抜いた11人『ME:I』、デビュー曲で早速再生回数1000万回超!【月間総合ランキング】
人気動画

Creepy Nutsの「Bling-Bang-Bang-Born」人気すぎてTOP2独占…!オーディションを生き抜いた11人『ME:I』、デビュー曲で早速再生回数1000万回超!【月間総合ランキング】

ME:Iの新曲MVが再生回数1000万越え!キヨ、ホラーゲーム実況が大人気!フィッシャーズ100分間鬼ごっこに元メンバーのぺけたん登場!【週間総合ランキング】
トレンドニュース

ME:Iの新曲MVが再生回数1000万越え!キヨ、ホラーゲーム実況が大人気!フィッシャーズ100分間鬼ごっこに元メンバーのぺけたん登場!【週間総合ランキング】

平野紫耀らNumber_iの能登震災チャリティーソングが堂々の1位|THE FIRST TAKEでは韓国ボーイズグループRIIZEが圧倒的実力を発揮し話題に【週間音楽人気動画】
カテゴリ別人気動画人気動画

平野紫耀らNumber_iの能登震災チャリティーソングが堂々の1位|THE FIRST TAKEでは韓国ボーイズグループRIIZEが圧倒的実力を発揮し話題に【週間音楽人気動画】

Creepy Nuts 「Bling-Bang-Bang-Born」歌詞通りTo the一番上!ヨルシカ「葬送のフローレン」主題歌ランクイン【週間音楽ランキング】
トレンドニュース

Creepy Nuts 「Bling-Bang-Bang-Born」歌詞通りTo the一番上!ヨルシカ「葬送のフローレン」主題歌ランクイン【週間音楽ランキング】

Creepy Nuts「Bling-Bang-Bang-Born」勢い止まらずTOP2独占!なこなこチャンネル結婚を芸能人にも報告【週間総合ランキング】
人気動画

Creepy Nuts「Bling-Bang-Bang-Born」勢い止まらずTOP2独占!なこなこチャンネル結婚を芸能人にも報告【週間総合ランキング】

Creepy Nutsのトレンドニュース