Browse Source

developer first commit

developer
zhangshu 6 months ago
parent
commit
aecaa7ec68
  1. BIN
      db/youtube_prod.db
  2. 49
      download/DownloadUtil.py
  3. 14
      download/Orm.py
  4. 16
      download/SrtFileService.py
  5. 52
      download/main_download.py
  6. 12
      src/KeyWordService.py
  7. 20
      src/Orm.py
  8. 16
      src/SrtFileService.py
  9. 2179
      src/hk_tw_names_20240703_v2.csv
  10. 31
      src/insert_keyword.py
  11. 891
      test/1.srt
  12. 25
      test/test.py

BIN
db/youtube_prod.db

Binary file not shown.

49
download/DownloadUtil.py

@ -4,11 +4,13 @@ from youtube_transcript_api.formatters import SRTFormatter
from VideoService import VideoService from VideoService import VideoService
from ChannelService import ChannelService from ChannelService import ChannelService
from DownloadInfoService import DownloadService from DownloadInfoService import DownloadService
from SrtFileService import SrtService
from LoggerUtils import Logger from LoggerUtils import Logger
import time import time
import os import os
from func_timeout import func_set_timeout from func_timeout import func_set_timeout
import operator import operator
import pysrt
class DownLoadUtil: class DownLoadUtil:
@ -16,6 +18,22 @@ class DownLoadUtil:
formatter = SRTFormatter() formatter = SRTFormatter()
proxies = {"http": "http://127.0.0.1:7890", proxies = {"http": "http://127.0.0.1:7890",
"https": "https://127.0.0.1:7890"} "https": "https://127.0.0.1:7890"}
def iterateSrt(srtFilePath, videoId, channelId):
# 查询是否存在
if SrtService.checkByVideoId(videoId):
Logger.info("VideoId: {} 已收录", videoId)
return
subs = pysrt.open(srtFilePath)
ordinal = 1
for sub in subs:
srtStartTime = str(sub.start.to_time()).rstrip("0")
srtEndTime = str(sub.end.to_time()).rstrip("0")
SrtService.createOne(videoId, channelId, ordinal,
srtStartTime, srtEndTime, sub.text)
ordinal = ordinal + 1
@func_set_timeout(60) @func_set_timeout(60)
def downloadOne(videoId): def downloadOne(videoId):
@ -36,22 +54,33 @@ class DownLoadUtil:
videoPublishTime = str(videoPublishTime).split("T")[0] videoPublishTime = str(videoPublishTime).split("T")[0]
# 开始下载 # 开始下载
Logger.info("开始下载...{}".format(videoId)) Logger.info("开始下载...{}".format(videoId))
cpPath = ""
try: try:
mainPath = "E:/Work/youtubedownload/main"
tmpPath = "E:/Work/youtubedownload/tmp"
# 获取字幕 # 获取字幕
languages = str(video.videoLanguage) languages = str(video.videoLanguage)
storePath = "/mnt/srt_file/" + str(channel.channelTitle) storePath = "/mnt/srt_file"
cpPath = "/mnt/tmp_srt_file/" + str(channel.channelTitle) cpPath = "/mnt/tmp_srt_file"
# TODO 测试代码删除
storePath = mainPath
cpPath = tmpPath
storePath = "{}/{}/{}-{}".format(
storePath, languages, channel.channelId, channel.channelTitle)
cpPath = "{}/{}/{}-{}".format(
cpPath, languages, channel.channelId, channel.channelTitle)
1
if not os.path.exists(storePath): if not os.path.exists(storePath):
Logger.info("开始创建文件夹:" + storePath) Logger.info("开始创建文件夹:" + storePath)
os.makedirs(storePath) os.makedirs(storePath)
if not os.path.exists(cpPath): if not os.path.exists(cpPath):
Logger.info("开始创建文件夹:" + cpPath) Logger.info("开始创建文件夹:" + cpPath)
os.makedirs(cpPath) os.makedirs(cpPath)
storePath = storePath + "/" + videoPublishTime + \
"-" + languages + "-" + videoTitle + ".srt" storePath = "{}/{}.srt".format(storePath, videoId)
cpPath = cpPath + "/" + videoPublishTime + \ cpPath = "{}/{}.srt".format(cpPath, videoId)
"-" + languages + "-" + videoTitle + ".srt"
if len(cpPath) > 120: if len(cpPath) > 120:
storePath = storePath[:-20] + ".srt" storePath = storePath[:-20] + ".srt"
cpPath = cpPath[:-20] + ".srt" cpPath = cpPath[:-20] + ".srt"
@ -70,6 +99,9 @@ class DownLoadUtil:
if downloadInfo is not None: if downloadInfo is not None:
DownloadService.updateInfoByVideoId( DownloadService.updateInfoByVideoId(
videoId, downloadInfo.tryTime + 1, 1, 1) videoId, downloadInfo.tryTime + 1, 1, 1)
# 按句读取字幕文件
DownLoadUtil.iterateSrt(storePath, videoId, video.channelId)
except Exception as e: except Exception as e:
Logger.error("下载失败...{}".format(videoId)) Logger.error("下载失败...{}".format(videoId))
logStr = "Exception...{}".format(e) logStr = "Exception...{}".format(e)
@ -85,7 +117,8 @@ class DownLoadUtil:
languages = str(video.videoLanguage) languages = str(video.videoLanguage)
videoSrt = YouTubeTranscriptApi.get_transcript( videoSrt = YouTubeTranscriptApi.get_transcript(
videoId, languages=[languages]) videoId, languages=[languages])
srt_formatted = DownLoadUtil.formatter.format_transcript(videoSrt) srt_formatted = DownLoadUtil.formatter.format_transcript(
videoSrt)
storePath = "/mnt/srt_file/" + str(channel.channelTitle) + "/" + \ storePath = "/mnt/srt_file/" + str(channel.channelTitle) + "/" + \
videoPublishTime + "-" + languages + "-" + videoId + ".srt" videoPublishTime + "-" + languages + "-" + videoId + ".srt"
cpPath = "/mnt/tmp_srt_file/" + str(channel.channelTitle) + "/" + \ cpPath = "/mnt/tmp_srt_file/" + str(channel.channelTitle) + "/" + \

14
download/Orm.py

@ -15,6 +15,7 @@ def ormInit():
Channel.create_table() Channel.create_table()
Video.create_table() Video.create_table()
DownloadInfo.create_table() DownloadInfo.create_table()
SrtFile.create_table()
class BaseModel(Model): class BaseModel(Model):
@ -52,8 +53,6 @@ class Video(BaseModel):
db_table = 'Vidoes' db_table = 'Vidoes'
# 下载信息 # 下载信息
class DownloadInfo(BaseModel): class DownloadInfo(BaseModel):
id = PrimaryKeyField() id = PrimaryKeyField()
videoId = CharField() videoId = CharField()
@ -63,3 +62,14 @@ class DownloadInfo(BaseModel):
class Meta: class Meta:
db_table = 'Download_info' db_table = 'Download_info'
# 字幕文件信息
class SrtFile(BaseModel):
id = PrimaryKeyField()
videoId = CharField(null=False)
channelId = CharField(null=False)
ordinal = IntegerField()
srtStartTime = CharField()
srtEndTime = CharField()
srtText = CharField()
isScan = IntegerField()

16
download/SrtFileService.py

@ -0,0 +1,16 @@
from Orm import SrtFile
class SrtService:
def createOne(videoId, channelId, ordinal, srtStartTime, srtEndTime, srtText):
SrtFile.create(videoId=videoId,
channelId=channelId,
ordinal=ordinal,
srtStartTime=srtStartTime,
srtEndTime=srtEndTime,
srtText=srtText,
isScan=0)
def checkByVideoId(videoId):
list = SrtFile.select().where(SrtFile.videoId == videoId).limit(10).execute()
return len(list) > 0

52
download/main_download.py

@ -22,28 +22,30 @@ if __name__ == "__main__":
Contant.logDir = args.logDir Contant.logDir = args.logDir
initLogger() initLogger()
Orm.ormInit() Orm.ormInit()
list = DownloadService.findNotFinishList() testVideoId="oZhBWA3HNhA"
Logger.info("list size:{}".format(len(list))) DownLoadUtil.downloadOne(testVideoId)
while (len(list) > 0): # list = DownloadService.findNotFinishList()
for info in list: # Logger.info("list size:{}".format(len(list)))
try: # while (len(list) > 0):
DownLoadUtil.downloadOne(info.videoId) # for info in list:
restTime = random.randint(1, 3) # try:
Logger.info("间隔{}秒后继续...".format(restTime)) # DownLoadUtil.downloadOne(info.videoId)
time.sleep(restTime) # restTime = random.randint(1, 3)
except func_timeout.exceptions.FunctionTimedOut as e: # Logger.info("间隔{}秒后继续...".format(restTime))
Logger.error("执行下载方法超时错误:{}".format(e)) # time.sleep(restTime)
loopRestTime = random.randint(1, 3) # except func_timeout.exceptions.FunctionTimedOut as e:
Logger.info("循环间隔{}秒后继续...".format(loopRestTime)) # Logger.error("执行下载方法超时错误:{}".format(e))
time.sleep(loopRestTime) # loopRestTime = random.randint(1, 3)
list = DownloadService.findNotFinishList() # Logger.info("循环间隔{}秒后继续...".format(loopRestTime))
# 发送钉钉消息 # time.sleep(loopRestTime)
webhook = "https://oapi.dingtalk.com/robot/send?access_token=c8c8d7d42c4eecd449dd303025ef968f647d1d8e8694e3fabc0ab5770d646dcb" # list = DownloadService.findNotFinishList()
jsonData = { # # 发送钉钉消息
"msgtype": "text", # webhook = "https://oapi.dingtalk.com/robot/send?access_token=c8c8d7d42c4eecd449dd303025ef968f647d1d8e8694e3fabc0ab5770d646dcb"
"text": { # jsonData = {
"content": "[Youtube]download finished" # "msgtype": "text",
} # "text": {
} # "content": "[Youtube]download finished"
requests.post(webhook, json=jsonData) # }
Logger.info("download发送钉钉消息成功...") # }
# requests.post(webhook, json=jsonData)
# Logger.info("download发送钉钉消息成功...")

12
src/KeyWordService.py

@ -0,0 +1,12 @@
from Orm import KeyWord
from LoggerUtils import Logger
class KeyWordService:
def createOne(region, word):
keyWord = KeyWord.get_or_none(
KeyWord.region == region, KeyWord.word == word)
if keyWord is not None:
Logger.info("region:{},word:{} exist", region, word)
else:
KeyWord.create(region=region, word=word)

20
src/Orm.py

@ -9,6 +9,7 @@ parser.add_argument('--logDir', type=str, default='')
parser.add_argument("--start", type=str, default="") parser.add_argument("--start", type=str, default="")
parser.add_argument("--end", type=str, default="") parser.add_argument("--end", type=str, default="")
parser.add_argument("--channelId", type=str, default="") parser.add_argument("--channelId", type=str, default="")
parser.add_argument('--file', type=str, default='')
args = parser.parse_args() args = parser.parse_args()
Contant.db = args.db Contant.db = args.db
db = SqliteDatabase(Contant.db) db = SqliteDatabase(Contant.db)
@ -18,6 +19,8 @@ def ormInit():
Channel.create_table() Channel.create_table()
Video.create_table() Video.create_table()
DownloadInfo.create_table() DownloadInfo.create_table()
SrtFile.create_table()
KeyWord.create_table()
class BaseModel(Model): class BaseModel(Model):
@ -66,3 +69,20 @@ class DownloadInfo(BaseModel):
class Meta: class Meta:
db_table = 'Download_info' db_table = 'Download_info'
# 字幕文件信息
class SrtFile(BaseModel):
id = PrimaryKeyField()
videoId = CharField(null=False)
channelId = CharField(null=False)
ordinal = IntegerField()
srtStartTime = CharField()
srtEndTime = CharField()
srtText = CharField()
isScan = IntegerField()
# 关键字
class KeyWord(BaseModel):
id = PrimaryKeyField()
region = CharField()
word = CharField()

16
src/SrtFileService.py

@ -0,0 +1,16 @@
from Orm import SrtFile
class SrtService:
def createOne(videoId, channelId, ordinal, srtStartTime, srtEndTime, srtText):
SrtFile.create(videoId=videoId,
channelId=channelId,
ordinal=ordinal,
srtStartTime=srtStartTime,
srtEndTime=srtEndTime,
srtText=srtText,
isScan=0)
def checkByVideoId(videoId):
list = SrtFile.select().where(SrtFile.videoId == videoId).limit(10).execute()
return len(list) > 0

2179
src/hk_tw_names_20240703_v2.csv

File diff suppressed because it is too large

31
src/insert_keyword.py

@ -0,0 +1,31 @@
from LoggerUtils import Logger, initLogger
import argparse
import Contant
from Orm import ormInit, Channel
import operator
from bs4 import BeautifulSoup as bs
from urllib.request import urlopen, Request
import pandas as pd
from KeyWordService import KeyWordService
# python3 ./insert_keyword.py --db="../db/youtube_prod.db" --logDir="./logs" --file="./hk_tw_names_20240703_v2.csv"
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='')
parser.add_argument('--db', type=str, default='')
parser.add_argument('--logDir', type=str, default='')
parser.add_argument('--file', type=str, default='')
args = parser.parse_args()
Contant.db = args.db
Contant.logDir = args.logDir
csvFile = args.file
initLogger()
ormInit()
Logger.info("SqlLite存放地址:"+Contant.db)
Logger.info("日志文件存放地址:"+Contant.logDir)
Logger.info("开始初始化...")
df = pd.read_csv(csvFile, encoding="utf-8")
length = df.shape[0]
for i in range(0, length):
KeyWordService.createOne(df.iloc[i]["market"], str(df.iloc[i]["lname"]).strip())
KeyWordService.createOne(df.iloc[i]["market"], str(df.iloc[i]["sname"]).strip())

891
test/1.srt

@ -0,0 +1,891 @@
1
00:00:07,040 --> 00:00:13,519
[音楽]
2
00:00:17,780 --> 00:00:23,000
みなさんこんにちはバカでも稼げる米国株高配当投手の著者で
3
00:00:23,000 --> 00:00:27,530
ブログバフェット太郎の秘密のポートフォリオ書いているバフェットだろうです
4
00:00:27,530 --> 00:00:34,550
今回お話する内容というのは米国経済で起きた今週1週間のまとめとそして
5
00:00:34,550 --> 00:00:37,800
ダウ平均が強気相場入りしたことについて解説
6
00:00:37,800 --> 00:00:39,740
していきたいとおもいます
7
00:00:39,740 --> 00:00:46,580
最初にざっくりと大まかな流れを説明しておくと frb が量的緩和政策を無制限に
8
00:00:46,580 --> 00:00:48,260
することを発表しました
9
00:00:48,260 --> 00:00:51,740
またトランプ政権が過去最大となる
10
00:00:51,740 --> 00:00:55,970
2兆ドル規模の景気刺激策を実施することも決定しました
11
00:00:55,970 --> 00:00:59,730
通した中でつ業保険申請件数が過去
12
00:00:59,730 --> 00:01:04,290
最悪の328万人という数字が出ているわけなんですが
13
00:01:04,290 --> 00:01:08,790
株価が大きく反発していてダウ平均が強気相場入りしているんですね
14
00:01:08,790 --> 00:01:15,810
そのため個人投資家の中にはあれ底打ちしたのと底打ちしたのであれば何に投資すれば
15
00:01:15,810 --> 00:01:19,200
いいのと考えている人もいると思うんですけれども
16
00:01:19,200 --> 00:01:19,720
今回
17
00:01:19,720 --> 00:01:25,240
の動画では米国株が底打ちしたのかどうかといった先行き見通しや
18
00:01:25,240 --> 00:01:31,360
これから何に投資すべきかということについてわかりやすく解説していきますので是非
19
00:01:31,360 --> 00:01:34,950
最後までご覧くださいそれではよろしくお願いします
20
00:01:34,950 --> 00:01:42,329
まず前回の動画でも紹介した通り今週の初め付 rb が両手期間を制作における目標
21
00:01:42,329 --> 00:01:48,479
買い入れ額を当初予定の7000億ドルから無制限にすることを決定しました
22
00:01:48,479 --> 00:01:54,970
そもそも量的緩和政策というのは地上から大量の再建や mbs 住宅ローン
23
00:01:54,970 --> 00:02:00,130
担保証券などを購入して市場に資金を供給する政策のことです
24
00:02:00,130 --> 00:02:04,960
大量の資金が市場に流入すればドルが逼迫しなくなりますから
25
00:02:04,960 --> 00:02:11,160
金利が急騰したり流動性が低下したりするといったことが避けられるわけですまた
26
00:02:11,160 --> 00:02:14,960
cmbs 商業不動産担保証券
27
00:02:14,960 --> 00:02:19,550
も購入の対象として加えられたほか社債や etf
28
00:02:19,550 --> 00:02:26,360
さらに abs 資産担保証券も購入することが発表されました abs というのは
29
00:02:26,360 --> 00:02:32,390
自動車ローンや学生ローンなどの債権をそれを担保に証券化したものになります
30
00:02:32,390 --> 00:02:34,950
なんか難しくてよくわからないなっていう人のた
31
00:02:34,950 --> 00:02:37,140
目に簡単に説明しますと
32
00:02:37,140 --> 00:02:44,790
今というかこれから米国経済で起ころうとしている問題というのは銀行が企業や個人に
33
00:02:44,790 --> 00:02:47,970
お金を貸したがらなくなっているということなんですね
34
00:02:47,970 --> 00:02:51,540
そして企業に貸したお金を返して欲しいといった
35
00:02:51,540 --> 00:02:57,130
貸しはがしや貸し渋りといったことが起こりつつあるということなんです人
36
00:02:57,130 --> 00:03:02,860
こうは昔から晴れた日に傘を貸して雨の日に傘を取り上げるなんて揶揄されたりするん
37
00:03:02,860 --> 00:03:09,040
ですけれどもこれは大不況の中で銀行としての仕事を放棄することを非難してるんです
38
00:03:09,040 --> 00:03:09,370
39
00:03:09,370 --> 00:03:13,570
なぜ大不況の中で銀行が消灯しないのかというと
40
00:03:13,570 --> 00:03:17,150
大不況であるということは企業や個人の
41
00:03:17,150 --> 00:03:22,010
破産が増えるので貸したお金が返ってこないリスクがあるからなんですね
42
00:03:22,010 --> 00:03:28,760
銀行は貸したお金の利息で儲かっているので帰って来ないお金は貸せないんですよ
43
00:03:28,760 --> 00:03:33,590
そのため生き残るために貸し渋りをしたり貸しはがしをしたりして
44
00:03:33,590 --> 00:03:36,830
できるだけ手元に資金を置いておきたいわけです
45
00:03:36,830 --> 00:03:42,440
でもそれだと世の中にお金がで回らなくなるので経済が死んでしまうんです
46
00:03:42,440 --> 00:03:47,540
そこで中央銀行にあたる frb が最後の貸し手となって
47
00:03:47,540 --> 00:03:54,440
市中銀行に大量の資金を供給するわけですすると銀行の手元資金は潤沢になるので
48
00:03:54,440 --> 00:03:56,819
貸し渋りをしたり貸しはがしをした
49
00:03:56,819 --> 00:04:01,980
にすることがなくなりますし金利が急騰するといったことも避けられるんです
50
00:04:01,980 --> 00:04:08,700
そして2008年の金融危機の際は frb が7000億ドル規模の量的緩和政策を
51
00:04:08,700 --> 00:04:14,639
実施して衆生にガンガン資金を供給して危機を脱したわけなんですけれども今回も
52
00:04:14,639 --> 00:04:16,840
7000億ドルが予定されて入ったんで
53
00:04:16,840 --> 00:04:22,930
けれどもコロナショックによる経済活動への打撃が大きすぎるということで
54
00:04:22,930 --> 00:04:27,130
7000億ドルから無制限とすることが決定されました
55
00:04:27,130 --> 00:04:32,889
ちなみに frb のパウエル議長が26日の木曜日にですね
56
00:04:32,889 --> 00:04:36,830
これは異例のことなんですけれども nbc のニュース番組と
57
00:04:36,830 --> 00:04:44,180
全員に出演したんですねそこでパウェル議長は今回の資金供給に関しては弾薬が尽きる
58
00:04:44,180 --> 00:04:51,170
ことはないとして量的緩和政策が無制限であることを強調していますつまり frb は
59
00:04:51,170 --> 00:04:54,500
コロナショックに対する金融緩和策として
60
00:04:54,500 --> 00:05:01,250
躊躇することなくそして手段も選ばないという明確な姿勢を示しているんですただし
61
00:05:01,250 --> 00:05:05,510
金融緩和だけでは限界があるのも事実なんです
62
00:05:05,510 --> 00:05:10,640
なぜかというと frb ができることは金利を引き上げたり
63
00:05:10,640 --> 00:05:14,490
引き下げたりすることそして最近夜叉細胞
64
00:05:14,490 --> 00:05:21,599
購入することだけだからでつまり frb だけでなくて政府による景気刺激策も必要
65
00:05:21,599 --> 00:05:23,819
になってくるわけなんですね
66
00:05:23,819 --> 00:05:32,340
そして政府による2兆ドル規模の大型景気刺激策は25日に上院で採決されて207日
67
00:05:32,340 --> 00:05:33,660
に下院で採決
68
00:05:33,660 --> 00:05:34,480
同日に
69
00:05:34,480 --> 00:05:38,040
トランプ大統領が署名して成立しました
70
00:05:38,040 --> 00:05:44,550
大型景気刺激策の内訳をざっくり眺めると個人給付が300010億ドル
71
00:05:44,550 --> 00:05:50,580
失業給付が2500億ドル中小企業支援に3490億ドル
72
00:05:50,580 --> 00:05:57,480
大企業支援に5000億ドルという風になっています大型の景気刺激策の柱である個人
73
00:05:57,480 --> 00:05:58,030
給付と
74
00:05:58,030 --> 00:06:04,920
いうのは国民一人ひとりに現金が小切手で配られるというものなんですがその額は大人
75
00:06:04,920 --> 00:06:06,280
1200ドル
76
00:06:06,280 --> 00:06:12,850
子供500ドルになることが決まりましたまた失業給付というのは特例の失業給付とし
77
00:06:12,850 --> 00:06:18,050
て毎週600ドルが通常の失業保険に上乗せされて給付
78
00:06:18,050 --> 00:06:24,199
されるというものです今回の頃なショックでレストランやホテルでは大量の従業員が
79
00:06:24,199 --> 00:06:30,919
解雇されていて解雇された従業員の中には貯金がゼロという人も珍しくないんですね
80
00:06:30,919 --> 00:06:38,040
で彼らは翌月の家賃が払えないので大量のホームレスが発生してしまうんじゃないか
81
00:06:38,040 --> 00:06:44,070
といった懸念があったわけですしかし今回の法案が成立したことでそういった事態は
82
00:06:44,070 --> 00:06:48,160
回避できるんじゃないかということが期待されています
83
00:06:48,160 --> 00:06:55,360
また中小企業と大企業を合わせた企業支援策についてはおおよそ9000億ドル規模に
84
00:06:55,360 --> 00:06:56,920
なることが決定しました
85
00:06:56,920 --> 00:07:02,350
これは当初の予定額5000億ドルから大幅に増額されています
86
00:07:02,350 --> 00:07:06,820
内訳は飲食業やホテル業航空業など
87
00:07:06,820 --> 00:07:08,180
ポロなショックによるだ
88
00:07:08,180 --> 00:07:11,630
劇を最も受けたとみられる業界に5000億ドル
89
00:07:11,630 --> 00:07:19,400
そして中小企業の従業員の給与支払いを政府が肩代わりするのに3490億ドルという
90
00:07:19,400 --> 00:07:20,330
風になってます
91
00:07:20,330 --> 00:07:26,570
この政府が肩代わりする給与についてはコロナショック後も企業が従業員をリストラし
92
00:07:26,570 --> 00:07:28,169
たりあるいは令二
93
00:07:28,169 --> 00:07:34,800
一時的邂逅していなければ政府が肩代わりした給与は返還しなくてもよいとする優遇
94
00:07:34,800 --> 00:07:35,999
措置のことです
95
00:07:35,999 --> 00:07:39,840
ただしリストラや0養父をした場合は変化しなくてはなりません
96
00:07:39,840 --> 00:07:47,550
こうした企業支援策があれば企業の倒産件数も減りますし失業者も幾分抑制されること
97
00:07:47,550 --> 00:07:48,160
が期待
98
00:07:48,160 --> 00:07:54,910
できます特に労働者は一度失業してしまうと再び働き始めるのにものすごく時間が
99
00:07:54,910 --> 00:08:01,030
かかるので失業者はできるだけ少なくしなければならないんですたとえば彼らは失業
100
00:08:01,030 --> 00:08:02,950
保険を申請して
101
00:08:02,950 --> 00:08:10,060
失業保険を受給しながら次の職を探して企業に問い合わせをして面接の日程を調整して
102
00:08:10,060 --> 00:08:16,510
面接をして合否を待ってそしてようやく働き始めることができるわけですこれって
103
00:08:16,510 --> 00:08:22,940
すごくめんどくさいですしてまですよねこのように失業してから再び働き派
104
00:08:22,940 --> 00:08:28,280
滑るまですごく時間がかかるので生産性が一気に落ちてしまうんですね
105
00:08:28,280 --> 00:08:31,460
さらに収入も失業保険だけですから
106
00:08:31,460 --> 00:08:38,360
消費がガクンと落ち込みますですから通常の景気後退局面というのはそこから脱却する
107
00:08:38,360 --> 00:08:42,960
までに短くても半年長ければ1年半くらいかかるわけ
108
00:08:42,960 --> 00:08:49,350
でそのため今回のプロなショックでリセッション入りしても個人への手厚い給付金が
109
00:08:49,350 --> 00:08:55,410
あることを考えれば景気後退は幾分短期的なものになることが期待できるわけです
110
00:08:55,410 --> 00:09:02,950
実際パウエル frb 議長は幹線危機が終息すれば力強い回復が見られるという3
111
00:09:02,950 --> 00:09:05,450
見方を示しているんです
112
00:09:05,450 --> 00:09:11,030
このチャートが何度も紹介していますが s & p 500と frb のバランス
113
00:09:11,030 --> 00:09:17,300
シートの推移を眺めるとバランスシートの拡大に伴って株価が上昇していることが
114
00:09:17,300 --> 00:09:18,500
わかると思います
115
00:09:18,500 --> 00:09:25,440
今回 frb が量的緩和政策を無制限にするとしたということは貸借対照表
116
00:09:25,440 --> 00:09:31,260
が無限に拡大するだけじゃなくてドルの価値が目減りするということも意味するわけ
117
00:09:31,260 --> 00:09:37,649
ですそしてそれは同時に株価が大暴騰するという未来を予見させるものです
118
00:09:37,649 --> 00:09:44,399
企業業績や経済指標がこれから悪化するのに本当に株価は大坊とするのと不安に思って
119
00:09:44,399 --> 00:09:49,860
いる人も少なくないと思うんですけれどもそもそも強気相場というのは悲観の中に
120
00:09:49,860 --> 00:09:50,579
生まれ
121
00:09:50,579 --> 00:09:57,640
会議の中に育ちラッカーの中で成熟し幸福感の中で消えていくというふうに言われてい
122
00:09:57,640 --> 00:10:03,430
ようにまさに今のような悲観の中で強気相場というのは生まれてくるんですね
123
00:10:03,430 --> 00:10:09,580
ただやっぱり悲観の中で買うっていうのはなかなか難しいと思うんですよ
124
00:10:09,580 --> 00:10:16,660
例えば26日の木曜日に労働省が発表した失業保険申請件数は
125
00:10:16,660 --> 00:10:20,230
要素165万人に対して結果
126
00:10:20,230 --> 00:10:25,030
3208万3000人と予想を大きく上回る
127
00:10:25,030 --> 00:10:28,510
大量の失業者が発生しているんですね
128
00:10:28,510 --> 00:10:34,760
1967年以降の53年間の申請件数の推移をみていただくとわかると思うんです
129
00:10:34,760 --> 00:10:35,660
けれども
130
00:10:35,660 --> 00:10:40,940
今回の数字がいかに桁外れに悪い数値かがわかると思います
131
00:10:40,940 --> 00:10:45,710
労働市場はこんな状況ですから4月以降に発表される
132
00:10:45,710 --> 00:10:48,000
13月期の四半期決算は
133
00:10:48,000 --> 00:10:54,420
悲惨な数字が出てくるでしょうし経済指標もどんどん悪い数字が出てくると思います
134
00:10:54,420 --> 00:11:00,240
このように将来悪い数値が出てくることがわかっている中で株を買い増すというのは
135
00:11:00,240 --> 00:11:04,500
多くの個人投資家には難しいと思いますただし
136
00:11:04,500 --> 00:11:07,830
絶好の買い場であることにはほかならないので
137
00:11:07,830 --> 00:11:07,990
138
00:11:07,990 --> 00:11:13,089
ランプ相場に乗れなかった人たちがもう一度トランプ相場に乗れるチャンスでもある
139
00:11:13,089 --> 00:11:14,230
わけです
140
00:11:14,230 --> 00:11:20,440
ここで気をつけてほしいのは今回の暴落で米国 love は危ないとかかぶって
141
00:11:20,440 --> 00:11:24,420
ギャンブルだよねっていう風に考えてほしくないんですよ
142
00:11:24,420 --> 00:11:29,850
ポロナーショックによる暴落局面というのは2009年から始まった
143
00:11:29,850 --> 00:11:36,029
11年にわたる強気相場に乗れなかった人たちがもう一度途中からのれるぜー高の
144
00:11:36,029 --> 00:11:37,950
チャンスを意味するんです
145
00:11:37,950 --> 00:11:45,660
しかも次の強気相場ではゼロ金利政策と無制限の量的緩和政策を追い風にした強気相場
146
00:11:45,660 --> 00:11:46,530
ですから
147
00:11:46,530 --> 00:11:50,550
大坊とすることが期待できるんですねまた将来
148
00:11:50,550 --> 00:11:53,580
インフレが加速することが予想されますから
149
00:11:53,580 --> 00:11:57,660
預貯金の実質的な価値の減少も予想されるわけです
150
00:11:57,660 --> 00:11:57,970
2
151
00:11:57,970 --> 00:12:04,810
ありこの強気相場に乗って投資を始めた人といつまでたっても投資を始めない人との間
152
00:12:04,810 --> 00:12:06,250
では将来
153
00:12:06,250 --> 00:12:09,519
絶望的な格差が生まれるということです
154
00:12:09,519 --> 00:12:15,610
では具体的な今後の展開なんですけれどもこれからは二番底を目指して下落する公算が
155
00:12:15,610 --> 00:12:17,379
大きいと考えています
156
00:12:17,379 --> 00:12:17,960
実は
157
00:12:17,960 --> 00:12:23,870
ダウ平均はすでに強気相場入りしているなんて言われているんですけれどもこれは直近
158
00:12:23,870 --> 00:12:30,290
の安値から+20%の上昇を強気相場入りというふうに定義しているためです
159
00:12:30,290 --> 00:12:34,580
ちなみに直近の高値からマイナス10%なら
160
00:12:34,580 --> 00:12:37,950
調整局面入り-20%なら
161
00:12:37,950 --> 00:12:41,790
弱気相場入りというふうに定義されていますとはいえ
162
00:12:41,790 --> 00:12:44,579
金融危機のときもそうだったんですがいい
163
00:12:44,579 --> 00:12:48,839
一旦強気相場入りしてもそこから再び下げているので
164
00:12:48,839 --> 00:12:53,459
安値から+20%上昇したとしても必ずしも
165
00:12:53,459 --> 00:13:00,119
弱気相場から脱却したとは言えないんですねそして金曜日のマーケットでダウ平均が
166
00:13:00,119 --> 00:13:03,119
4%超下落していますから
167
00:13:03,119 --> 00:13:04,570
おそらく2番
168
00:13:04,570 --> 00:13:09,070
渡航目指す展開になるんじゃないのかなというふうに僕は考えています
169
00:13:09,070 --> 00:13:12,640
これはそもそも通常の弱気相場というのは
170
00:13:12,640 --> 00:13:16,240
二番底3番底とした音を少しずつ
171
00:13:16,240 --> 00:13:22,090
固めていくものだからです例えば底値を形成する典型的なパターンとして
172
00:13:22,090 --> 00:13:24,560
ダブルボトムやトリプルボトムある
173
00:13:24,560 --> 00:13:30,020
岩逆ヘッドアンドショルダーだまあ逆三尊とも言ったりしますがこの3つのパターンが
174
00:13:30,020 --> 00:13:34,970
上げられるわけなんですけれどもこういったパターンを形成することが予想されます
175
00:13:34,970 --> 00:13:41,960
そのため1本調子で反発する確率はゼロではないんですけれども低いのかなというふう
176
00:13:41,960 --> 00:13:43,980
に僕は考えています
177
00:13:43,980 --> 00:13:50,100
そしてさきほども言いましたが強気相場とは悲観の中で生まれるものなので
178
00:13:50,100 --> 00:13:57,300
4月から8月ごろに底打ちして先行き見通しが悪化するなかで株価は上昇を開始すると
179
00:13:57,300 --> 00:13:59,130
いう風に考えています
180
00:13:59,130 --> 00:14:03,150
つまり8月にかけて絶好の買い場だということです
181
00:14:03,150 --> 00:14:04,000
ちなみに
182
00:14:04,000 --> 00:14:10,270
なぜ4月から8月ごろに底打ちするのかということについては以前の動画でも説明し
183
00:14:10,270 --> 00:14:12,700
ましたのでそちらをご参照ください
184
00:14:12,700 --> 00:14:15,970
概要欄の方にもリンクを貼っておきます
185
00:14:15,970 --> 00:14:23,410
では8月にかけて絶好の買い場であるなら一体何に投資すればいいのと誰もが考えて
186
00:14:23,410 --> 00:14:25,240
いることだと思うんですけれども
187
00:14:25,240 --> 00:14:30,819
長期的な資産形成を考えているなら一握りの優良株や s & p 500
188
00:14:30,819 --> 00:14:34,449
インデックスファンドなどに投資するのがいいと思います
189
00:14:34,449 --> 00:14:35,840
一握りの有料化
190
00:14:35,840 --> 00:14:42,050
が具体的にどういった銘柄を指すのかというと例えば1つのアイデアとしてはダウ平均
191
00:14:42,050 --> 00:14:48,740
構成銘柄があると思いますそもそもダウン平均というのは米国の主要企業30社で構成
192
00:14:48,740 --> 00:14:51,980
されている株価指数のことなんですけれども
193
00:14:51,980 --> 00:14:55,860
どの銘柄も優良株なのでそこから比較的安定
194
00:14:55,860 --> 00:15:00,720
た業績が期待できる銘柄に投資するのがいいのかなというふうに思います
195
00:15:00,720 --> 00:15:04,140
例えばアップルやマイクロソフトコカコーラ
196
00:15:04,140 --> 00:15:07,529
プロクターアンドギャンブルジョンソンエンドジョンソンウォールマート
197
00:15:07,529 --> 00:15:14,670
ディズニナイキマグドナルドなどですこれらの優良株が割安に放置されることはあまり
198
00:15:14,670 --> 00:15:15,850
ないんですけれども
199
00:15:15,850 --> 00:15:21,310
暴落局面では投資家が他の投資の損失を埋めるために
200
00:15:21,310 --> 00:15:25,180
たとえそれが優良株であっても売らざるを得なくなって
201
00:15:25,180 --> 00:15:32,110
泣く泣く手放したりするので暴落局面っていうのは優良株を割安な価格で買う絶好の
202
00:15:32,110 --> 00:15:33,640
チャンスなんですね
203
00:15:33,640 --> 00:15:39,130
まとめると先週は将来の巨大な強気相場の子たちとなる
204
00:15:39,130 --> 00:15:45,200
無制限の量的緩和政策が決定したほか大型景気刺激策が成立し
205
00:15:45,200 --> 00:15:51,260
たことでリセッションが短期間で収束するのではといった期待感が高まりました
206
00:15:51,260 --> 00:15:55,910
そして今後の展開は先行き見通しが悪化するなかで
207
00:15:55,910 --> 00:16:02,570
二番底を目指して株価が再び下げ始めますがそれは長期的に見れば絶好の買い場である
208
00:16:02,570 --> 00:16:05,190
ということですさらにコロナ
209
00:16:05,190 --> 00:16:10,290
ウイルスの終息後に巨大な強気相場が始まることを考えれば今回の you were
210
00:16:10,290 --> 00:16:16,560
機相場をきっかけに投資を始めた人といつまでたっても投資を始めない人との間では
211
00:16:16,560 --> 00:16:20,889
将来絶望的な格差が生まれるということです
212
00:16:20,889 --> 00:16:24,850
最後に何に投資すればいいのかについてですが
213
00:16:24,850 --> 00:16:27,970
長期的な資産形成を考えるのであれば
214
00:16:27,970 --> 00:16:30,999
ダウ構成銘柄に採用されているような
215
00:16:30,999 --> 00:16:34,209
一握りの優良株がいいでしょうしあるいは
216
00:16:34,209 --> 00:16:38,799
s & p 500インデックスファンドなどの指数に連動したパッシブファンドに
217
00:16:38,799 --> 00:16:40,880
投資するのがいいと思います
218
00:16:40,880 --> 00:16:43,910
ということで今回の動画は以上になります
219
00:16:43,910 --> 00:16:46,420
good luck
220
00:16:46,430 --> 00:16:47,710
ていますん
221
00:16:47,710 --> 00:16:52,630
もし今回の動画がためになったという方はチャンネル登録良いねボタンコメントなど
222
00:16:52,630 --> 00:16:54,550
頂けたらとても嬉しいです
223
00:16:54,550 --> 00:16:59,280
あとツイッターもやってますので良ければフォローお願いします

25
test/test.py

@ -1,9 +1,16 @@
import requests # import requests
webhook = "https://oapi.dingtalk.com/robot/send?access_token=c8c8d7d42c4eecd449dd303025ef968f647d1d8e8694e3fabc0ab5770d646dcb" # webhook = "https://oapi.dingtalk.com/robot/send?access_token=c8c8d7d42c4eecd449dd303025ef968f647d1d8e8694e3fabc0ab5770d646dcb"
jsonData = { # jsonData = {
"msgtype": "text", # "msgtype": "text",
"text": { # "text": {
"content": "[Youtube]aaaa" # "content": "[Youtube]aaaa"
} # }
} # }
requests.post(webhook, json=jsonData) # requests.post(webhook, json=jsonData)
import pysrt
srtFile = "E:/code/youtube_prod/test/1.srt"
subs = pysrt.open(srtFile)
for sub in subs:
print("Text: {} duration: {}-{}".format(sub.text,
str(sub.start.to_time()).rstrip("0"), str(sub.end.to_time()).rstrip("0")))

Loading…
Cancel
Save