見出し画像

AIけんた食堂 #shorts #kentasyokudou #oi_ken

けんた食堂の動画

抽出する。

const BOOK_ID = ""

const CHANNEL_ID = 'UCWsAvz-plMpc8dgiaoMb0XQ'

// 実行関数
function main() {
  const channelId = CHANNEL_ID;
  const videos = getVideosAll(channelId);
  videos.forEach(video => {
    console.log(JSON.stringify(video));
  })

  const output = videos.map(video => {
    return [
      video.videoId,
      video.title,
      video.link,
      video.caption
    ]
  })

  output.unshift(["video_id", "title", "link", "caption"])

  const book = SpreadsheetApp.openById(BOOK_ID)
  const sheet = book.getSheetByName("videos")
  sheet.clear()
  sheet.getRange(1, 1, output.length, 4).setValues(output)

}

// チャンネル内のすべての動画のタイトルとリンクを取得
function getVideosAll(channelId) {
  const channel = getChannel(channelId);
  const playlistId = uploadPlaylist(channel);
  const videoIds = getVideoIdsAll(playlistId);
  const videos = videoIds.map(videoId => {

    const video = getVideo(videoId)

    return {
    'title': video.items[0].snippet.title,
    'link': watchLink(videoId),
    'videoId': videoId,
    'caption': video.items[0].contentDetails.caption
    }
  });
  return videos;
}

// チャンネル情報を取得
function getChannel(channelId) {
  return YouTube.Channels.list([
    'contentDetails'
  ], {
    'id': channelId
  });
}

// "upload"プレイリストID
const uploadPlaylist = channel => channel.items[0].contentDetails.relatedPlaylists.uploads;

// 再生用リンク
const watchLink = videoId => `https://www.youtube.com/watch?v=${videoId}`;

// ビデオタイトル
const videoTitle = videoId => getVideo(videoId).items[0].snippet.title;

// プレイリスト内のすべてのvideoIdを取得
function getVideoIdsAll(playListId) {
  let videoIds = [];
  let nextPageToken = null;

  while(true) {
    const info = getVideoIdsOnePage(playListId, nextPageToken);
    videoIds = videoIds.concat(info.videoIds);
    if(info.nextPageToken != null) {
      nextPageToken = info.nextPageToken
    } else {
      break;
    }
  }
  return videoIds;
}

// プレイリスト内の特定のページのvideoIdをすべて取得
function getVideoIdsOnePage(id, pageToken) {
  const info = YouTube.PlaylistItems.list([
    'contentDetails'
  ], {
    'playlistId': id,
    'maxResults': 50,
    pageToken,
  });
  return {
    videoIds: info.items.map(item => item.contentDetails.videoId),
    nextPageToken: info.nextPageToken
  };
}

// Video情報を取得
function getVideo(videoId) {
  return YouTube.Videos.list([
      'snippet',
      'statistics',
      'contentDetails'
    ], {
    'id': videoId
  });
}

GASを使うのが簡単だ。

字幕を取る。

import csv
from youtube_transcript_api import YouTubeTranscriptApi

output = []

with open('extract.csv', 'r') as f:
	reader = csv.reader(f)
	header = next(reader)
	print(header)
	for row in reader:
		print(row[0])
		transcript_list = YouTubeTranscriptApi.get_transcript(row[0], languages=['ja'])
		japanese_transcript = [text['text'] for text in transcript_list]
		output.append([row[0], '\n'.join(japanese_transcript)])


with open('translate.csv', 'w') as f:
	writer = csv.writer(f)
	writer.writerow(['video_id', 'translate'])
	for row in output:
		print(row)
		writer.writerow([row[0], row[1].replace('\u3000', '')])

盛り付ける。

整える。

Gemini Pro

"""
At the command line, only need to run once to install the package via pip:

$ pip install google-generativeai
"""

import google.generativeai as genai
import csv

genai.configure(api_key="")

# Set up the model
generation_config = {
  "temperature": 0.9,
  "top_p": 1,
  "top_k": 1,
  "max_output_tokens": 2048,
}

safety_settings = [
  {
    "category": "HARM_CATEGORY_HARASSMENT",
    "threshold": "BLOCK_ONLY_HIGH"
  },
  {
    "category": "HARM_CATEGORY_HATE_SPEECH",
    "threshold": "BLOCK_ONLY_HIGH"
  },
  {
    "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
    "threshold": "BLOCK_ONLY_HIGH"
  },
  {
    "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
    "threshold": "BLOCK_ONLY_HIGH"
  },
]

model = genai.GenerativeModel(model_name="gemini-pro",
                              generation_config=generation_config,
                              safety_settings=safety_settings)

prompt_parts = ['あなたは料理系YouTuber。inputは動画タイトル。outputは動画の台本。outputでは敬語や丁寧語を使わないでタメ口で話して']
with open('dataset.csv', 'r') as f:
	reader = csv.reader(f)
	header = next(reader)
	for row in reader:
		prompt_parts.append(f'input: {row[0]}')
		prompt_parts.append(f'output: {row[1]}')

prompt_parts.append('input: 梅干しステーキ #shorts')
prompt_parts.append('output: ')

response = model.generate_content(prompt_parts)
print(response.text)

ChatGPTでも構わない。

出来上がり

緑油10秒寝かせて上からこす
こうや豆腐の汁で煮込んで
かつお節入り鶏がらスープで
合わせたニラを入れる
緑油を垂らす
完成

玉虫色のラーメン #shorts

まずステーキを焼く
フライパンに油をひいて、ステーキを焼く。 両面に焼き目をつける。 焼けたら一度取り出す。
梅干しをたたく。
梅干しを包丁でたたく。種をとりのぞく。
ステーキに梅干しをのせて焼く。
再びフライパンにステーキをのせ、たたく梅干しをのせる。
梅干しを焦がさないように注意しながら焼く。
ステーキを切って盛り付ける。
ステーキを食べやすい大きさに切り、お皿に盛り付ける。
ソースをかける。
お好みでソースをかけて出来上がり。

梅干しステーキ #shorts

今回のつけダレはストロングゼロ最高傑作
酒の1つ ストロングゼロ ダブルレモン
そして主役の麺
こんにちは
いただきます

ストゼロつけ麺 #shorts

スーパーカップ ストゼロ開封
ファミチキを上に乗せます
蓋をして
3分待って
混ぜたら
出来上がり
最高

スーパーカップ ストゼロ ファミチキ #shorts

最高峰の飲み物
ごまを炒って
当たり鉢に入れて
すりこぎで擦って
細かくなった状態で
熱湯を注いで
蓋をして10分放置して
濾します

出来上がり
濃い口醤油味噌
砂糖
みりん
濾したごま

牛乳
シェイカーに入れて
シェイクして
グラスに注いでそして
頂きまーす

甘さとしょっぱさ
コクと苦味
最高峰の一杯です

ごま味噌フラペチーノ #shorts

試してみてね!

この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?