ニコニコ動画埋め込みプレイヤーAPI非公式リファレンス

5年前の記事しか見当たらなかったので

初期化

<iframe src="http://embed.nicovideo.jp/watch/<動画ID>?jsapi=1&playerId=<内部処理用ID>"></iframe>

動画IDはsm9とかso35384944とかです

※プレ限や有料動画などは表示できません

内部処理用IDは文字列なら何でも大丈夫そうです

イベントの受け取り

window.addEventListener('message', (event) => {
    if (event.origin === 'https://embed.nicovideo.jp') {
        //do something
    }
});

イベントの種類

error

type error = {
    code: string,
    message: string,
    raw: any | undefined
}

削除・非公開

{
    code: "possibly_deleted_video",
    message: "この動画は表示できません\n現在視聴できないか、削除された可能性があります",
    raw: undefined
}

チャンネル動画他

{
    code: "externally_unwatchable",
    message: "",
    raw: undefined
}

loadComplete

type loadComplete = {
    data: {
        videoInfo: {
            commentCount: number,
            description: string,
            lengthInSeconds: number,
            mylistCount: number,
            postedAt: Date,
            thumbnailUrl: string,
            title: string,
            videoId: string,
            viewCount: number,
            watchId: number
        }
    }
    eventName: "loadComplete",
    playerId: string,
    sourceConnectorType: 0
}

playerMetadataChange

type playerMetadataChange = {
    data: {
        currentTime: number,
        duration: number,
        isVideoMetaDataLoaded: boolean,
        maximumBuffered: number,
        muted: boolean,
        showComment: boolean,
        volume: number
    },
    eventName: "playerMetadataChange",
    playerId: string,
    sourceConnectorType: 0
}

playerStatusChange

type playerStatusChange = {
    data: {
        playerStatus: number
    },
    eventName: "playerStatusChange",
    playerId: string,
    sourceConnectorType: 0
}

statusChange

type statusChange = {
    data: {
        playerStatus: number,
        seekStatus: number
    },
    eventName: "statusChange",
    playerId: string,
    sourceConnectorType: 0
}

メゾットの使い方

HTMLIFrameElement.contentWindow.postMessage(message, 'https://embed.nicovideo.jp');

メゾットの種類

commentVisibilityChange

type commentVisibilityChange = {
    eventName: 'commentVisibilityChange',
    data: {
        commentVisibility: boolean
    }
    sourceConnectorType: 1,
    playerId: string
}

incrementViewCount

type incrementViewCount = {
    eventName: 'incrementViewCount',
    sourceConnectorType: 1,
    playerId: string
}

mute

type mute = {
    eventName: 'mute',
    data: {
        mute: boolean
    }
    sourceConnectorType: 1,
    playerId: string
}

pause

type pause = {
    eventName: 'pause',
    sourceConnectorType: 1,
    playerId: string
}

play

type play = {
    eventName: 'play',
    sourceConnectorType: 1,
    playerId: string
}

seek

type seek = {
    eventName: 'seek',
    data: {
        time: number
    }
    sourceConnectorType: 1,
    playerId: string
}

volumeChange

type volumeChange = {
    eventName: 'volumeChange',
    data: {
        volume: number
    }
    sourceConnectorType: 1,
    playerId: string
}

過不足などあればコメントか管理人のTwitterまでお願いします

コメントにて質問される方へ

  1. 質問を投稿する前に、コメント欄を読んで、類似の質問がないか確認してください
  2. 英語だからと読む前に質問をしないでください(翻訳ツールなどを使用して読む努力をしてください)

当ブログはソフトの紹介などはしていますが、開発者ではありませんし、サポート窓口でもありません

とりあえず分からないから質問するのではなく、自分で調べ、試してそれでも分からない場合に質問するようにしてください

今後、あまりにも頭の悪い質問や、回答済みの質問に類似しているものに関してはスパムと同様に削除させていただきます

予めご了承ください

2022/06/02

コメントする

メールアドレスが公開されることはありません。