スキップしてメイン コンテンツに移動

RSSからYoutube/Podcast配信

Youtubeでの投稿制限

YouTubeからロックの通知

自動投稿を繰り返していたある日YouTubeコミュニティから投稿した動画をロックしたとの連絡が。

同じ動画をYouTube Stadio経由から投稿した場合は問題ない為、どうやら自動投稿の上限に引っかかった様子。

上限の解除はアプリケーションの承認されれば対応できそうだが、Webを調べた限りは簡単には通らなさそう。
仕方がないのYouTubeのライブ配信を使って動画ファイルをRTMP経由でアップロードします。
この作業にはGCPとBloggerの連携の箇所の修正が必要です。

YouTube Data APIスコープの変更

test.py
YOUTUBE_UPLOAD_SCOPE = "https://www.googleapis.com/auth/youtube.upload"
YOUTUBE_API_SERVICE_NAME = "youtube"
YOUTUBE_API_VERSION = "v3"
uploadだけだったものをライブストリーミング/ブロードキャストが可能な様にスコープを広げます。
token.pickleファイルを削除し、認証をし直してください。
またYouTube Stadioからライブストリーミングの開始を申請が必要です。

Pythonプログラム

test.pyに以下のコードを記述します。
デフォルトのライブストリームのキーを取得し、ライブブロードキャストと紐づけます。
そして指定されたRTMPのURLにffmpegで動画ストリーミングを流しこみます。
test.py
import datetime
from pytz import timezone
def getStreamKey(title,desc):
    youtube = get_authenticated_service(YOUTUBE_API_SERVICE_NAME,YOUTUBE_API_VERSION)

    request = youtube.liveStreams().list(
        part="snippet,cdn,contentDetails,status",
    mine = True
    )
    response = request.execute()

    key = None
    for item in response['items']:

        if 'Default' in item['snippet']['title']:
            key = item['cdn']['ingestionInfo']['streamName']

            start = datetime.datetime.now(timezone('Asia/Tokyo'))
            start = start + datetime.timedelta(seconds=5)
            day = start.strftime('%Y年%m月%d日 ')
            start_date = start.strftime('%Y-%m-%dT%H:%M:%S+09:00') 
            end = start + datetime.timedelta(hours=1)
            end_date = end.strftime('%Y-%m-%dT%H:%M:%S+09:00') 

            request = youtube.liveBroadcasts().insert(
                part="id,snippet,contentDetails,status",
                body={
                  "contentDetails": {
                    "enableClosedCaptions": True,
                    "enableContentEncryption": True,
                    "enableDvr": True,
                    "enableEmbed": True,
                    "enableAutoStart": True,
                    "enableAutoStop": True,
                    "recordFromStart": True,
                    "startWithSlate": True
                  },
                  "snippet": {
                    "title": day + title,
                    "description" : desc,
                    "scheduledStartTime": start_date,
                    "scheduledEndTime": end_date
                  },
                  "status": {
                    "privacyStatus": "public"
                  }
                }
            )
            response = request.execute()

            broadcast_id = response['id']
            request = youtube.liveBroadcasts().bind(
                id = broadcast_id,
                part="id,snippet,contentDetails,status",
                streamId = item['id']
            )
            response = request.execute()

            time.sleep(5)

    return key

def streamVideo(title,desc):
    key = getStreamKey(title,desc)
    if key == None:
        return

    cmd = 'ffmpeg -y -i /tmp/input.mp4 -i /tmp/temp.mp3 '
    cmd += ' -movflags +faststart -c:a aac -profile:a aac_low -ac 2 -ar 48000 -c:v libx264'
    cmd += ' -vf yadif=0:-1:1 -profile:v high -bf 2 -g 30 -coder 1 -b:v 1M -b:a 384k'
    cmd += ' -pix_fmt yuv420p -map 0:v:0 -map 1:a:0 -shortest '
    cmd += ' -f flv rtmp://a.rtmp.youtube.com/live2/' + key 
    rtn = subprocess.run(cmd, shell=True, stdout=PIPE, stderr=PIPE, text=True)

上記で作成したstreamVideo()をgetRss()から呼び出してください。
test.py
def getRss():
    with open('/tmp/temp.mp3' ,mode='wb+') as f:
        f.truncate(0) 
    rssUrl = 'https://news.google.com/news/rss/headlines/section/topic/TECHNOLOGY'
    rssLang = '?hl=en-US&gl=US&ceid=US:en'
    feed = feedparser.parse(rssUrl + rssLang)
    for entry in feed.entries:
            link = entry.get('link')
            getBody(link)
    #makeVideo()
    #youtube_upload('この動画のタイトル','この記事の説明',['この動画のタグ'])
    streamVideo('この記事のタイトル','この記事の説明')
    time.sleep(5)
これでライブ配信された動画がYoutube上に残っているはずです。
と言いたいところでしたが公開から6時間くらいすると非公開にされてしまうようです。
根本的にはGoogleへ認証してもらうしかないのかもしれません。
もしくはYoutubeStudioから再アップロードするしかないです。


なお、音声のみ配信をしたい場合はPodCastでの音声配信を参考にしてください。 

このブログの人気の投稿

RSSからYoutube/Podcast配信

皆さん、情報収集はどの様にされていますでしょうか? 私は最先端に情報に触れる為、海外ニュースをRSSで購読しているのですが、私の英語力/語彙力では時間が掛かかってしょうがない。 また、できれば目で読むのではなく、音声で聞き流しながら通勤や他の作業中に行いたい。 という事で自動でニュースを収集・要約・翻訳し、それをブログ・ポッドキャスト・Youtubeに自動投稿するPythonプログラムを作成して時短化しました。 その手法を公開してますので参考にしてください。 Bloggerの立ち上げ方 GCPとBloggerの連携 情報収集自動化 Blogger自動投稿 本文要約 翻訳 音声作成 動画作成 Youtubeにアップロード Youtubeの投稿制限の回避方法 Podcast配信 翻訳・要約の改善(GPT-3) 以下のURLで上記から作成したブログやYoutubeを公開しています。参考までに見てください。 ブログ:海外ニュースを仕入れてお届け YouTube:海外Newsを仕入れてお届け Amazon Music:海外ニュースを仕入れてお届け。 Google Podcasts:海外ニュースを仕入れてお届け。 Apple Podcasts:海外ニュースを仕入れてお届け。

本文要約

要約 今回は現在使用している方法とは異なり、実装が簡単な要約方法になります。 参考元にはニューラルネットワーク(accel-brain-base)を使用した例などもありますので、そちらを参考にしてください。 Pythonライブラリの追加 以下のライブラリをインストールしてください。 $ pip install pysummarization Pythonプログラム test.pyに以下のコードを記述します。 ここでソース記事の各行を重みづけしてから、重要度の高い5つの行だけを選択します。 test.py from pysummarization.nlpbase.auto_abstractor import AutoAbstractor from pysummarization.tokenizabledoc.simple_tokenizer import SimpleTokenizer from pysummarization.abstractabledoc.top_n_rank_abstractor import TopNRankAbstractor def getSummary ( text ): # Object of automatic summarization. auto_abstractor = AutoAbstractor () # Set tokenizer. auto_abstractor . tokenizable_doc = SimpleTokenizer () # Set delimiter for making a list of sentence. auto_abstractor . delimiter_list = [ ". " , ". \n " , " \n " ] # Object of abstracting and filtering document. abstractable_doc = TopNRankAbstractor () # Summarize document. result_dict = auto_abstrac

Bloggerの立ち上げ

Bloggerとは BloggerはGoogleのサービスの一つで、無料でブログを始めることができます。 Googleアカウントが必要となりますので、ない方はアカウントの作成をお願いします。 Bloggerサイトへのログイン https://www.blogger.com/から「ブログの作成」を選択してください。 Googleアカウントを聞かれるので、Googleアカウントとパスワードを入力してください。 ブログの名前を入力 作成するブログの名前を決めます。これは後から変えられるのでとりあえずは書こうとしてる内容に沿ったものを記入してください。 ブログのURL(インターネット上の所在地)を作成します。 こちらも変更できる(※)のですがので、頻繁に変更すると読者や検索などから外されてしますので、個人名や法人名など変更しないことを前提に名付けた方が良いと思います。 (※「.blogspot.com」以外のカスタムドメインを自分でとって、それを設定することもできます) プロファイルの作成 ブログが作成されるとプロファイルの作成画面が出てきます。ブログ読者に見られることを意識して、ユーザー名やわかりやすい説明を記入しましょう。 以上でブログが作成できました。作成したURLをブラウザに打ち込んでみましょう! 貴方だけのブログサイトが立ち上がりました。 次は GCP(Google Cloud Platform)とBloggerを連携 させてみましょう。 参考: Blogger Help