amkorousagi / Trendup

OIDC2020
0 stars 0 forks source link

youtube_data.py 구현(0703) #19

Closed amkorousagi closed 4 years ago

amkorousagi commented 4 years ago

,

amkorousagi commented 4 years ago

15940322683473693100987421775768

first, search by category.

GET https://www.googleapis.com/youtube/v3/search parameters are type=video, videocategoryid=?

for knowing videocategoryid,

https://www.googleapis.com/youtube/v3/videoCategories?part=snippet&regionCode={two-character-region}&key={YOUR_API_KEY}

will return all categories, along with their ids, for a given region.

so find proper categoryid, do REST api on python

Refer: https://developers.google.com/youtube/v3/docs/search/list?hl=ko https://stackoverflow.com/questions/17698040/youtube-api-v3-where-can-i-find-a-list-of-each-videocategoryid

amkorousagi commented 4 years ago

second, get text from video, by titile and thumnale(computervision), and get keyword from the text by natural language. this is very similar my other project ; https://github.com/amkorousagi/Meali2

so i want for jyt to do this... Plz :)

amkorousagi commented 4 years ago

For iterator statement

response for search by category

{ "kind": "youtube#searchListResponse", "etag": etag, "nextPageToken": string, "prevPageToken": string, "pageInfo": { "totalResults": integer, "resultsPerPage": integer }, "items": [ search Resource ] }

view all items, Keep going while next page token exist .

amkorousagi commented 4 years ago

Plz convert above sudo code to python code

amkorousagi commented 4 years ago

Like as above, respense list category id { "kind": "youtube#videoCategoryListResponse", "etag": etag, "nextPageToken": string, "prevPageToken": string, "pageInfo": { "totalResults": integer, "resultsPerPage": integer }, "items": [ videoCategories resource ] }

view items keep going while next page token exist

yuntaeJ commented 4 years ago

https://github.com/youtube/api-samples/blob/master/python/README.md

amkorousagi commented 4 years ago

2020/08/02, start to implement.

The step ..

  1. make GCP youtube data API- REST APIT- python file
  2. by virtualenv, flask. make to work on container background
  3. check whether youtube data in DB or not
amkorousagi commented 4 years ago

https://www.googleapis.com/youtube/v3/search?q=<검색어>&key=<자신의 API키> 로 확인해본 결과 rest api 이상없이 작동함을 확인함.

amkorousagi commented 4 years ago

https://developers.google.com/youtube/v3/docs/search/list?hl=ko https://senticoding.tistory.com/37 이 두 사이트를 가장 많이 참고함

amkorousagi commented 4 years ago

https://developers.google.com/youtube/v3/docs/guideCategories/list

getCategoryId 를 위해 이 페이지를 참고함

amkorousagi commented 4 years ago

카테고리id별로 rest api를 요청하고 list로 만드는 임시 코드를 작성함

import json import requests

URL_SEARCH = "https://www.googleapis.com/youtube/v3/search" API_KEY = "AIzaSyABYt3bjXmFzFyzZxJJut7J93Bv_3BkhUE"

def getList(categoryId): response = requests.get(URL_SEARCH + "?videoCategoryId=" + categoryId + "&part=snippet" + "&key=" + API_KEY + "&type=video") print(response.json())

def print_hi(name):

Use a breakpoint in the code line below to debug your script.

print(f'Hi, {name}')  # Press Ctrl+F8 to toggle the breakpoint.

if name == 'main': print_hi('PyCharm') getList("1")

amkorousagi commented 4 years ago

그 결과

{'kind': 'youtube#searchListResponse', 'etag': 'FXYr72KXx5KdlU8-yTiuPJlGgtU', 'nextPageToken': 'CAUQAA', 'regionCode': 'KR', 'pageInfo': {'totalResults': 1000000, 'resultsPerPage': 5}, 'items': [{'kind': 'youtube#searchResult', 'etag': 'AH4_B7T5tA3Du-VJj_rfy9QzCOY', 'id': {'kind': 'youtube#video', 'videoId': 'i6sRBs9EIf4'}, 'snippet': {'publishedAt': '2020-07-24T16:00:10Z', 'channelId': 'UCV6g95OBbVtFmN9uiJzkFqQ', 'title': 'When You Only Level Up One Party Member', 'description': 'Evenly distributing upgrades and XP? Never heard of the guy! Subscribble for more viddles ▻ https://www.youtube.com/circletoonshd Merch!', 'thumbnails': {'default': {'url': 'https://i.ytimg.com/vi/i6sRBs9EIf4/default.jpg', 'width': 120, 'height': 90}, 'medium': {'url': 'https://i.ytimg.com/vi/i6sRBs9EIf4/mqdefault.jpg', 'width': 320, 'height': 180}, 'high': {'url': 'https://i.ytimg.com/vi/i6sRBs9EIf4/hqdefault.jpg', 'width': 480, 'height': 360}}, 'channelTitle': 'CircleToonsHD', 'liveBroadcastContent': 'none', 'publishTime': '2020-07-24T16:00:10Z'}}, {'kind': 'youtube#searchResult', 'etag': 'UbN68WxspuHElVDMdvqX--r_n0E', 'id': {'kind': 'youtube#video', 'videoId': 'MzP9QOUdpQ4'}, 'snippet': {'publishedAt': '2020-07-30T20:05:05Z', 'channelId': 'UC3sznuotAs2ohg_UJzj_Q', 'title': 'Film Theory:\xa0Willy Wonka RIGGED the Golden Tickets!', 'description': 'Check out Food Theory! ▻ https://bit.ly/3eSc5l6 Pizza is a SANDWICH?! ▻ https://youtu.be/TxhrZBO4jY0 Willy Wonka and the Chocolate Factory is a gem in the ...', 'thumbnails': {'default': {'url': 'https://i.ytimg.com/vi/MzP9QOUdpQ4/default.jpg', 'width': 120, 'height': 90}, 'medium': {'url': 'https://i.ytimg.com/vi/MzP9QOUdpQ4/mqdefault.jpg', 'width': 320, 'height': 180}, 'high': {'url': 'https://i.ytimg.com/vi/MzP9QOUdpQ4/hqdefault.jpg', 'width': 480, 'height': 360}}, 'channelTitle': 'The Film Theorists', 'liveBroadcastContent': 'none', 'publishTime': '2020-07-30T20:05:05Z'}}, {'kind': 'youtube#searchResult', 'etag': 's66l7tM8CYSOTF0lbNODR2brSo4', 'id': {'kind': 'youtube#video', 'videoId': '1gPGeAYo3yU'}, 'snippet': {'publishedAt': '2020-07-23T13:00:09Z', 'channelId': 'UCt4Xdx38tkV5_3IkOJAFw-Q', 'title': 'BILL & TED FACE THE MUSIC Official Trailer #2 (2020)', 'description': "It's time to save the world, dudes! Keanu Reeves and Alex Winter return in the all-new trailer for Bill & Ted Face the Music, available On Demand and in theaters ...", 'thumbnails': {'default': {'url': 'https://i.ytimg.com/vi/1gPGeAYo3yU/default.jpg', 'width': 120, 'height': 90}, 'medium': {'url': 'https://i.ytimg.com/vi/1gPGeAYo3yU/mqdefault.jpg', 'width': 320, 'height': 180}, 'high': {'url': 'https://i.ytimg.com/vi/1gPGeAYo3yU/hqdefault.jpg', 'width': 480, 'height': 360}}, 'channelTitle': 'Orion Pictures', 'liveBroadcastContent': 'none', 'publishTime': '2020-07-23T13:00:09Z'}}, {'kind': 'youtube#searchResult', 'etag': 'F4leiX3Xkl1Yy9qc54rmJQkpJEw', 'id': {'kind': 'youtube#video', 'videoId': 'ikICXBzenvo'}, 'snippet': {'publishedAt': '2020-07-31T16:00:59Z', 'channelId': 'UCV6g95OBbVtFmN9uiJzkFqQ', 'title': 'If The Internet Was an Anime', 'description': "Even if you were to defeat this guy, he'd only get replaced with someone slightly stronger next season.... Subscribble for more viddles ...", 'thumbnails': {'default': {'url': 'https://i.ytimg.com/vi/ikICXBzenvo/default.jpg', 'width': 120, 'height': 90}, 'medium': {'url': 'https://i.ytimg.com/vi/ikICXBzenvo/mqdefault.jpg', 'width': 320, 'height': 180}, 'high': {'url': 'https://i.ytimg.com/vi/ikICXBzenvo/hqdefault.jpg', 'width': 480, 'height': 360}}, 'channelTitle': 'CircleToonsHD', 'liveBroadcastContent': 'none', 'publishTime': '2020-07-31T16:00:59Z'}}, {'kind': 'youtube#searchResult', 'etag': '9xlEy4yjj9j-wh6-U3htdns4ZU', 'id': {'kind': 'youtube#video', 'videoId': 'RG1iYRQtjKI'}, 'snippet': {'publishedAt': '2020-07-23T12:02:10Z', 'channelId': 'UCH6vXjt-BA7QHl0KnfL-7RQ', 'title': 'SOS (Simon's Cat Origins Story: Part 3)', 'description': "Baby Simon's Cat is here to stay!!! Watch 'SOS', the final film from our origins series right meow and share your cat's most memorable messes below. Credits ...", 'thumbnails': {'default': {'url': 'https://i.ytimg.com/vi/RG1iYRQtjKI/default.jpg', 'width': 120, 'height': 90}, 'medium': {'url': 'https://i.ytimg.com/vi/RG1iYRQtjKI/mqdefault.jpg', 'width': 320, 'height': 180}, 'high': {'url': 'https://i.ytimg.com/vi/RG1iYRQtjKI/hqdefault.jpg', 'width': 480, 'height': 360}}, 'channelTitle': "Simon's Cat", 'liveBroadcastContent': 'none', 'publishTime': '2020-07-23T12:02:10Z'}}]}

amkorousagi commented 4 years ago

regionCode 라는 파라미터가, 업로더가 한국인인 비디오를 보여주는 것이 아니라, 그저 한국에서 제한되지 않은 비디오를 보여주는 것임을 깨달음.

이후 relevanceLanguage 라는 파라미터로 한국과 관련된 정보만 보려고 했지만, 실패함

어쩌면 q 라는 파라미터로만 국가에대한 관련성을 조정할 수 있는 것 일지도...

계속 찾아보겠음

amkorousagi commented 4 years ago

https://advertools.readthedocs.io/en/master/advertools.youtube.html 에서 다 뒤져 봤지만 region 이나 language를 제한하는 모든 파라미터는 의미없었음. 한국이 아니라 전세계를 대상으로 데이터 수집하는 수 밖에 없는 듯... 아니면 q 파라미터로 불완전하게 localizing을 구현하던가..

amkorousagi commented 4 years ago

q 파라미터로 "자동차"를 넣은 결과

/home/psc/PycharmProjects/trendUp/venv/bin/python /home/psc/PycharmProjects/trendUp/main.py { "kind": "youtube#searchListResponse", "etag": "qwBh27L7mODvgRlpvHMWmF0vGno", "nextPageToken": "CAUQAA", "regionCode": "KR", "pageInfo": { "totalResults": 1000000, "resultsPerPage": 5 }, "items": [ { "kind": "youtube#searchResult", "etag": "ng3DgtiLPBefnJdB3pXw4l8jN9c", "id": { "kind": "youtube#video", "videoId": "usXEfQh7tV4" }, "snippet": { "publishedAt": "2020-07-25T23:00:09Z", "channelId": "UCURffR0e_FPKnDuzQ0XyWhw", "title": "자동차 장난감 구출놀이 포크레인 트럭놀이 Car Toy Stuck Mud Rescue Excavator", "description": "[With Kids Toys]위드키즈 토이즈 Funny Toys for Kids Car Toy Stuck in Mud Rescue Helps Excavator Truck Toys Activity 자동차 장난감 구출놀이 포크레인 트럭 ...", "thumbnails": { "default": { "url": "https://i.ytimg.com/vi/usXEfQh7tV4/default.jpg", "width": 120, "height": 90 }, "medium": { "url": "https://i.ytimg.com/vi/usXEfQh7tV4/mqdefault.jpg", "width": 320, "height": 180 }, "high": { "url": "https://i.ytimg.com/vi/usXEfQh7tV4/hqdefault.jpg", "width": 480, "height": 360 } }, "channelTitle": "위드키즈 토이즈 [With Kids Toys]", "liveBroadcastContent": "none", "publishTime": "2020-07-25T23:00:09Z" } }, { "kind": "youtube#searchResult", "etag": "ZiRQ4GeYM3Rw52e-PcATK99qIrc", "id": { "kind": "youtube#video", "videoId": "ydE1_OR08XI" }, "snippet": { "publishedAt": "2020-06-23T23:00:20Z", "channelId": "UCURffR0e_FPKnDuzQ0XyWhw", "title": "덤프트럭 포크레인 중장비 자동차 장난감 놀이 Dump Truck with Excavator Car Toy Play", "description": "[With Kids Toys]위드키즈 토이즈 Funny Toys for Kids Dump Truck with Excavator Car Toy Activity Video for Kids 덤프트럭 포크레인 중장비 자동차 장난감 놀이 ...", "thumbnails": { "default": { "url": "https://i.ytimg.com/vi/ydE1_OR08XI/default.jpg", "width": 120, "height": 90 }, "medium": { "url": "https://i.ytimg.com/vi/ydE1_OR08XI/mqdefault.jpg", "width": 320, "height": 180 }, "high": { "url": "https://i.ytimg.com/vi/ydE1_OR08XI/hqdefault.jpg", "width": 480, "height": 360 } }, "channelTitle": "위드키즈 토이즈 [With Kids Toys]", "liveBroadcastContent": "none", "publishTime": "2020-06-23T23:00:20Z" } }, { "kind": "youtube#searchResult", "etag": "ZDaMNHQ6AN0xMTuQYIiTpdElEEA", "id": { "kind": "youtube#video", "videoId": "w7Qf5S_SXcE" }, "snippet": { "publishedAt": "2019-12-08T03:29:47Z", "channelId": "UCtzr07Iifce7-48Kw1phdzg", "title": "시쿠 자동차 정비세트 도로놀이 세트 2가지를 동시에 가지고 놀아보아요", "description": "시쿠 자동차 정비세트 도로놀이 세트 2가지를 동시에 가지고 놀아보아요 Play with Siku Car Maintenance Set Road Play Set at the same time #장난감티비 #siku ...", "thumbnails": { "default": { "url": "https://i.ytimg.com/vi/w7Qf5S_SXcE/default.jpg", "width": 120, "height": 90 }, "medium": { "url": "https://i.ytimg.com/vi/w7Qf5S_SXcE/mqdefault.jpg", "width": 320, "height": 180 }, "high": { "url": "https://i.ytimg.com/vi/w7Qf5S_SXcE/hqdefault.jpg", "width": 480, "height": 360 } }, "channelTitle": "[장난감티비]TOYTV", "liveBroadcastContent": "none", "publishTime": "2019-12-08T03:29:47Z" } }, { "kind": "youtube#searchResult", "etag": "5ospnJ1QemPggtBROoJ1UhK2Xv4", "id": { "kind": "youtube#video", "videoId": "qIsGzQ0m2iE" }, "snippet": { "publishedAt": "2019-10-27T07:38:19Z", "channelId": "UCtzr07Iifce7-48Kw1phdzg", "title": "빅 캐리어가 나타났다 어떤 자동차가 들어있을까 색깔과 종류를 알아보아요! #장난감티비 동영상", "description": "빅 캐리어가 나타났다. 어떤 자동차가 들어있을까? 색깔과 종류를 알아보아요! #장난감티비 동영상 Big carrier appeared What kind of car is there? Learn the colors ...", "thumbnails": { "default": { "url": "https://i.ytimg.com/vi/qIsGzQ0m2iE/default.jpg", "width": 120, "height": 90 }, "medium": { "url": "https://i.ytimg.com/vi/qIsGzQ0m2iE/mqdefault.jpg", "width": 320, "height": 180 }, "high": { "url": "https://i.ytimg.com/vi/qIsGzQ0m2iE/hqdefault.jpg", "width": 480, "height": 360 } }, "channelTitle": "[장난감티비]TOYTV", "liveBroadcastContent": "none", "publishTime": "2019-10-27T07:38:19Z" } }, { "kind": "youtube#searchResult", "etag": "zh8CjHw6LTFX0gkdr7VkN1w2FwM", "id": { "kind": "youtube#video", "videoId": "JWDgVHCH5zc" }, "snippet": { "publishedAt": "2020-07-22T07:00:06Z", "channelId": "UCURffR0e_FPKnDuzQ0XyWhw", "title": "포크레인 중장비 자동차 장난감 구출놀이 Excavator Helps Car Toy Rescue", "description": "[With Kids Toys]위드키즈 토이즈 Funny Toys for Kids 3 Excavator Helps Car Toys Rescue Vehicles Toy Activity 포크레인 중장비 자동차 장난감 구출놀이 ...", "thumbnails": { "default": { "url": "https://i.ytimg.com/vi/JWDgVHCH5zc/default.jpg", "width": 120, "height": 90 }, "medium": { "url": "https://i.ytimg.com/vi/JWDgVHCH5zc/mqdefault.jpg", "width": 320, "height": 180 }, "high": { "url": "https://i.ytimg.com/vi/JWDgVHCH5zc/hqdefault.jpg", "width": 480, "height": 360 } }, "channelTitle": "위드키즈 토이즈 [With Kids Toys]", "liveBroadcastContent": "none", "publishTime": "2020-07-22T07:00:06Z" } } ] }

Process finished with exit code 0

amkorousagi commented 4 years ago

여러 다른 키워드로도 해보고, order 파라미터를 바꾸어도 봣지만, title에 해당 검색어가 반드시 포함되어야만 나오는 듯하다. 당초에 계획했던 카테고리별로 국내의 자료를 수집하는 것은 어렵고, 검색어로 자료를 수집하면 제목에 해당 검색어가 들어가지 않는 다른 비디오들은 검색대상에서 제외된다.

그리고 viewCount 순으로 자료를 찾아보는 것은 좋지 않은 방법 같다. 너무 고정적이다 현재 2년이상된 동영상이 압도적인 조회수로 계속 상위에 랭크되어 현재의 동향을 추출하기에는 부적절한 자료이다.

google에서 자체적으로 점수를 매기는 relevance를 order로 하는 것이 가장 적절해 보인다. 적당한 조회수와 적당히 최신자료를 상위에 랭크시켜 준다.

date – 리소스를 만든 날짜를 기준으로 최근 항목부터 시간 순서대로 리소스를 정렬합니다. rating – 높은 평가부터 낮은 평가순으로 리소스를 정렬합니다. relevance – 검색 쿼리에 대한 관련성을 기준으로 리소스를 정렬합니다. 이 매개변수의 기본값입니다. title – 제목에 따라 문자순으로 리소스를 정렬합니다. videoCount – 업로드한 동영상 수에 따라 채널을 내림차순으로 정렬합니다. viewCount – 리소스를 조회수가 높은 항목부터 정렬합니다.

amkorousagi commented 4 years ago

category와 q를 동시에 써봐도 q만 쓸때와 결과는 같다.

결론적으로, q와 order 파라미터를 활용해서 불완전하게나마 국내의 특정카테고리 최신 자료를 수집할 수 있으므로 category나 regionCode, relevanceLanguage 등의 파라미터는 제외하고 q, order 등의 파라미터를 활용한 유튜브 자료 수집 container를 만들어야겠다.

그러기 위해선 미리 특정 검색어를 정해두고 그 검색어들을 지속적으로 결과를 받아오며 동향을 check 해야한다. 특정 검색어를 정해보자.

amkorousagi commented 4 years ago

특정 검색어를 정할 때, 신중하게 정해야한다. "먹방"의 검색결과와 "음식"의 검색결과는 완전히 다르다. 먹방으로 검색하는 것이 좀더 고객층 수요를 판단하기 더 좋은 듯 하다. 그러므로 "옷" 이아니라 "패션" 같이 좀더 구체적이라고할까 좀더 소비자 지향적인 검색어를 선정해야 할것이다

amkorousagi commented 4 years ago

python list insert db https://pynative.com/python-mysql-insert-data-into-database-table/ python from json to list https://rfriend.tistory.com/474

amkorousagi commented 4 years ago

한 video 에서 tile과 description, view count를 알기 위해 video method를 사용한 결과

{ "kind": "youtube#videoListResponse", "etag": "_K3Nnz2GlF01eUQQ8cCNOzpjFeQ", "items": [ { "kind": "youtube#video", "etag": "BP42Rgp8PXwyeB4T3FAO5IWuRjY", "id": "r51UJMj9M6Y", "snippet": { "publishedAt": "2020-07-10T09:45:03Z", "channelId": "UCW-rU_ZE4dAKDejWdTAKmoA", "title": "저렴이 여름옷 30벌💕 키작녀 이쁜 원피스 한가득! 쇼핑했어요", "description": "#summerlookbook #여름옷하울 #패션\n\n❤ 옷 정보\n\n- 달트 / 하즈닝 플라워 원피스 - navy / 49,000원\n- 머랭 / 복숭아 체크 ops - long / 27,500원\n- 머랭 / 스티치 라인 코튼 버킷 벙거지 - 베이지 / 18,000원\n- 머랭 / 썸머 린넨 주름 버킷햇 벙거지 - 블랙 / 19,000원\n- 머랭 / 메종드 꽃 t - 소라 / 14,900원\n- 머랭 / 비비드 꽃자수 곱창 헤어밴드 / 7,000원\n- 에브리모닝 / 코이 플라워 롱 스커트 - 아이보리 / 24,000원\n- 에브리모닝 / 바이엘 랩 치마바지 - 아이보리 / 24,000원\n- 에브리모닝 / 슈가 슬리브&가디건 세트 - 피치핑크 / 24,000원\n- 파스텔타임 / 에어 퍼프 랩 ops - 인디핑크 / 34,000원\n- 파스텔타임 / 반팔 사브레 ops - 베이지 / 16,500원\n- 프롬데이원 / 로잘리 플라워 셔링 원피스 - 아이보리 / 47,000원\n- 프롬데이원 / 포비 배색 pk 원피스 - 네이비 / 29,500원\n- 퍼빗 / 모넷 플라워 롱 원피스 - 소라 / 47,000원\n- 프롬데이원 / 유닌 곱창 밴드 - 그린&진핑크 / 11,000원\n- 퍼빗 / love shirts & bl - 하늘소라 / 29,000원\n- 퍼빗 / 메모리 라인 스커트 - 소라 / 24,900원\n- 프롬데이원 / 프몬 레이스 나시 - 소라 / 17,500원\n- 프롬데이원 / 얼스 여름 체크 셔츠 - 블루그레이 / 32,000원\n- 블랙업 / JOY CROP SLEEVELESS - WHITE / 23,000원\n- 블랙업 / CLAUDIE COTTON SKIRT - PURPLE / 34,000원\n- 블랙업 / 루셀 하트 크리스탈 벨트 / 16,000원\n- 에이비글 / 코디하기 편한 무지 남방 - 화이트 / 15,500원\n- 빈블 / 레토 플라워 가디건 - 아이보리 / 29,500원\n- 빈블 / 비즈 레이스 플라워 스커트 - 오트밀 / 39,500원\n- 민스샵 / 엄지척 1+1 스트라이프 셔츠 - 소라, 민트 / 14,000원\n- 민스샵 / 디저트 원피스 / 23,000원\n\n\n\n\n—————————————————————————\n해당 컨텐츠의 조회수 광고수익중 매달 500,000원이 Save the Children 에 기부됩니다.\n\n☁️ Contact Mail \ndailyhaneulinfo@gmail.com\n\n☁️ Instagram\nhttps://www.instagram.com/haneulina\n\n☁️ 속옷쇼핑몰 하늘하늘\nhttps://www.hn-hn.co.kr", "thumbnails": { "default": { "url": "https://i.ytimg.com/vi/r51UJMj9M6Y/default.jpg", "width": 120, "height": 90 }, "medium": { "url": "https://i.ytimg.com/vi/r51UJMj9M6Y/mqdefault.jpg", "width": 320, "height": 180 }, "high": { "url": "https://i.ytimg.com/vi/r51UJMj9M6Y/hqdefault.jpg", "width": 480, "height": 360 }, "standard": { "url": "https://i.ytimg.com/vi/r51UJMj9M6Y/sddefault.jpg", "width": 640, "height": 480 }, "maxres": { "url": "https://i.ytimg.com/vi/r51UJMj9M6Y/maxresdefault.jpg", "width": 1280, "height": 720 } }, "channelTitle": "Ha Neul오늘의 하늘", "tags": [ "여름룩북", "여름옷하울", "여름옷", "지그재그", "브랜디", "여자쇼핑몰", "인터넷쇼핑몰", "여친룩", "여자친구", "개강룩", "바캉스룩", "감성", "하늘", "하늘이", "모델하늘", "하늘하늘", "하늘하늘모델", "오늘의하늘", "다이어트", "하늘모델", "haneul", "haneulina", "haneulhaneul", "속옷하늘", "속옷쇼핑몰", "뷰티", "겟레디윗미", "grwm", "일상", "브이로그", "남자친구", "blog", "kbeauty", "korean", "korean beauty", "vlog", "데일리", "koreanfashion", "fashion", "koreandailylook", "dailylook", "프롬데이원", "퍼빗", "달트", "파스텔타임", "빈블", "블랙업", "에이비글", "민스샵", "머랭", "여자친구룩", "옷하울", "패션", "패션하울" ], "categoryId": "22", "liveBroadcastContent": "none", "defaultLanguage": "ko", "localized": { "title": "저렴이 여름옷 30벌💕 키작녀 이쁜 원피스 한가득! 쇼핑했어요", "description": "#summerlookbook #여름옷하울 #패션\n\n❤ 옷 정보\n\n- 달트 / 하즈닝 플라워 원피스 - navy / 49,000원\n- 머랭 / 복숭아 체크 ops - long / 27,500원\n- 머랭 / 스티치 라인 코튼 버킷 벙거지 - 베이지 / 18,000원\n- 머랭 / 썸머 린넨 주름 버킷햇 벙거지 - 블랙 / 19,000원\n- 머랭 / 메종드 꽃 t - 소라 / 14,900원\n- 머랭 / 비비드 꽃자수 곱창 헤어밴드 / 7,000원\n- 에브리모닝 / 코이 플라워 롱 스커트 - 아이보리 / 24,000원\n- 에브리모닝 / 바이엘 랩 치마바지 - 아이보리 / 24,000원\n- 에브리모닝 / 슈가 슬리브&가디건 세트 - 피치핑크 / 24,000원\n- 파스텔타임 / 에어 퍼프 랩 ops - 인디핑크 / 34,000원\n- 파스텔타임 / 반팔 사브레 ops - 베이지 / 16,500원\n- 프롬데이원 / 로잘리 플라워 셔링 원피스 - 아이보리 / 47,000원\n- 프롬데이원 / 포비 배색 pk 원피스 - 네이비 / 29,500원\n- 퍼빗 / 모넷 플라워 롱 원피스 - 소라 / 47,000원\n- 프롬데이원 / 유닌 곱창 밴드 - 그린&진핑크 / 11,000원\n- 퍼빗 / love shirts & bl - 하늘소라 / 29,000원\n- 퍼빗 / 메모리 라인 스커트 - 소라 / 24,900원\n- 프롬데이원 / 프몬 레이스 나시 - 소라 / 17,500원\n- 프롬데이원 / 얼스 여름 체크 셔츠 - 블루그레이 / 32,000원\n- 블랙업 / JOY CROP SLEEVELESS - WHITE / 23,000원\n- 블랙업 / CLAUDIE COTTON SKIRT - PURPLE / 34,000원\n- 블랙업 / 루셀 하트 크리스탈 벨트 / 16,000원\n- 에이비글 / 코디하기 편한 무지 남방 - 화이트 / 15,500원\n- 빈블 / 레토 플라워 가디건 - 아이보리 / 29,500원\n- 빈블 / 비즈 레이스 플라워 스커트 - 오트밀 / 39,500원\n- 민스샵 / 엄지척 1+1 스트라이프 셔츠 - 소라, 민트 / 14,000원\n- 민스샵 / 디저트 원피스 / 23,000원\n\n\n\n\n—————————————————————————\n해당 컨텐츠의 조회수 광고수익중 매달 500,000원이 Save the Children 에 기부됩니다.\n\n☁️ Contact Mail \ndailyhaneulinfo@gmail.com\n\n☁️ Instagram\nhttps://www.instagram.com/haneulina\n\n☁️ 속옷쇼핑몰 하늘하늘\nhttps://www.hn-hn.co.kr" }, "defaultAudioLanguage": "ko" } } ], "pageInfo": { "totalResults": 1, "resultsPerPage": 1 } } × Drag and Drop The image will be downloaded

amkorousagi commented 4 years ago

description과 title은 part=snippet일 때 나오는데 viewcount는 part=statistic 일때 나온다. 한동영상당 2번씩 요청을 더해야한다. 이건 너무 큰 오버헤드다.

차라리 viewcount 알지말고 description 도 search method에서 앞에 짧게 제공되는 것만 읽고 title과 order가 relevance인 걸 순위로 보고 하자.

video method를 써서 view count와 자세한 description을 알기보다, 그저 relevance로 랭크 되는 것을 순위로 정하고, title과 조금 제공되는 description으로 keyword를 알자, upload time도 search method에 나오니까.

우리는 많은 양의 데이터를 처리해야 되기 때문에 한 동영상당 한번이라도 호출을 덜하는 더 좋을 것이다.

amkorousagi commented 4 years ago

다시생각해보니 view count를 모르면... 의미있는 데이터를 얻을수 없을 것 같다. view count는 필수다. 오버헤드가 발생하더라도 기능에 추가하자

amkorousagi commented 4 years ago

json in memory --> python object --> dictionary나 list 로 활용

amkorousagi commented 4 years ago

특정 검색어에 따라 반복적으로 형식에 맞는 row를 만들어 print 하는 반복문

import json import requests

URL_SEARCH = "https://www.googleapis.com/youtube/v3/search" URL_VIDEO = "https://www.googleapis.com/youtube/v3/videos" API_KEY = "AIzaSyABYt3bjXmFzFyzZxJJut7J93Bv_3BkhUE" MAX_RESULT = "5" MAX_PAGE = 5

def get_view_count_by_id(videoId): response = requests.get(URL_VIDEO + "?part=statistics" + "&key=" + API_KEY + "&id=" + videoId) pretty_json = json.loads(response.text) print(json.dumps(pretty_json, indent=4, ensure_ascii=False)) return pretty_json["items"][0]["statistics"]["viewCount"]

def get_youtube_data_by_q(q): i = 0 is_next = False while True: i += 1 if is_next: response = requests.get(URL_SEARCH + "?pageToken=" + next + "&part=snippet" + "&key=" + API_KEY + "&maxResults=" + MAX_RESULT + "&type=video&regionCode=KR&relevanceLanguage=ko") else : response = requests.get(URL_SEARCH + "?q=" + q + "&part=snippet" + "&key=" + API_KEY + "&maxResults=" + MAX_RESULT + "&type=video&regionCode=KR&relevanceLanguage=ko")

    res = json.loads(response.text)
    next = res["nextPageToken"]

    for item in res["items"]:
        print(q, item["snippet"]["title"], item["snippet"]["description"], get_view_count_by_id(item["id"]["videoId"]), item["snippet"]["publishTime"])

    if i < MAX_PAGE :
        is_next = True;
        continue
    break

if name == 'main': get_youtube_data_by_q("여름옷")

amkorousagi commented 4 years ago

여기에서 category는 q, keyword는 title과 description upload Time은 publish Time view Count

등의 형식으로 row를 만들어 출력했다

amkorousagi commented 4 years ago

차후 natural language나 computer vision을 통해 title, description, thumnale에서 의미있는 keyword를 추출할 수 있을 것이다

amkorousagi commented 4 years ago

현재 row는 아래와 같은 형태임

여름옷$$저렴이 여름옷 30벌💕 키작녀 이쁜 원피스 한가득! 쇼핑했어요$$summerlookbook #여름옷하울 #패션 ❤ 옷 정보 - 달트 / 하즈닝 플라워 원피스 - navy / 49000원 - 머랭 / 복숭아 체크 ops - long / 27500원 - 머랭 / 스티치 라인 코튼 ...$$143815$$2020-07-10T09:45:03Z 여름옷$$우리가 입을 옷이 없는 이유 : 여름편 (여름옷 100벌 돌려입을 기본템 40가지)$$Instagram @aimeoza 안녕하세요 여러부운 오자입니닷 오늘은 드디어!!!!!! 요청 많이 주신 여름기본템 영상을 들고왔어요 지난 기본템 영상 너무 노잼이라 걱정 ...$$179268$$2020-05-15T14:54:38Z 여름옷$$요청이 많았던 여름 옷코디 영상!! [쇼핑몰 '핫핑' 원브랜드 하울!] 0zoo 영주$$안녕 여러분~ 안녕 주주들~ 오늘은 원브랜드 하울 느낌으로 쇼핑몰 '핫핑'에서 구입한 옷들로 옷코디 영상을 찍어봤는데요! 핫핑이라는 쇼핑몰을 처음 들었는데 ...$$67992$$2020-07-25T11:00:17Z 여름옷$$여름코디🌴성공한 100만원어치 여름옷 데일리룩 모음!💚(feat.착한가격은 덤)$$안녕하세요 여러부운! 벌써 세번째 여름옷 하울이네요! 흡 Hoxy 지겨우신건 아니시죠?? 정말 고민많이 해서 조합해본 코디들 이에요! 데일리하게 입기 좋을 옷들로 ...$$13954$$2020-07-24T09:30:02Z 여름옷$$[데일리룩] 여름 옷 잔뜩 20set 👗 기본 린넨티 • 여름원피스 • 데일리백, 샌들까지$$Instagram.eun_dy https://www.instagram.com/eun_dy * E- mail cho44992204@hanmail.net 안녕하세요 여러분 ! 계절 상으로는 겨울까지 만나고 여름으로 왔는데, ...$$118786$$2020-07-16T11:56:57Z 여름옷$$Gran Metalik vs. Lince Dorado vs. Shorty G vs. Gulak – Fatal 4-Way Match: SmackDown, July 24, 2020$$Four SmackDown Superstars battle for a breakthrough Intercontinental Championship opportunity against AJ Styles. Catch WWE action on WWE Network, FOX, ...$$294569$$2020-07-25T02:59:18Z 여름옷$$Top 10 Friday Night SmackDown moments: WWE Top 10, July 24, 2020$$WWE Top 10 takes you back to this week's Friday Night SmackDown to revisit the show's most thrilling, physical and controversial moments, presented by ...$$824853$$2020-07-25T19:58:36Z 여름옷$$nba youngboy - death enclaimed$$YoungBoy Never Broke Again - Still Flexin, Still Steppin OUT NOW! Stream/Download: https://youngboy.lnk.to/StillFlexinStillSteppinID Subscribe for more official ...$$35502252$$2020-06-21T08:55:48Z 여름옷$$BALAN WONDERWORLD - Title Announcement Trailer - Nintendo Switch$$Welcome to BALAN WONDERWORLD: a wondrous show, the likes of which has never been seen before! The curtains have been lifted, unveiling the all-new 3D ...$$462591$$2020-07-24T18:15:18Z 여름옷$$We SAVED A Lost BABY Creeper In Minecraft!$$We found the cutest Baby Creeper, awwww man! ...but he's lost! Become a super awesome YouTube Member! https://www.youtube.com/aphmaugaming/join ...$$1889956$$2020-07-24T19:16:51Z 여름옷$$HYO ‘DESSERT (Feat. Loopy, SOYEON ((G)I-DLE))’ MV$$HYO's new single "DESSERT (Feat. Loopy, SOYEON ((G)I-DLE))" is out! Listen and download on your favorite platform: https://smarturl.it/HYO_DESSERT HYO ...$$8772996$$2020-07-22T11:00:04Z 여름옷$$FIRST LOOK: Rick and Morty Season 5 | adult swim$$Season 5 sneak peek of #rickandmorty at #AdultSwimCon SUBSCRIBE: http://bit.ly/AdultSwimSubscribe About Adult Swim: Get your Adult Swim fix whenever ...$$2231929$$2020-07-25T01:00:06Z 여름옷$$SIBLING PRANK WARS!!$$Things get heated! Thank you guys so much for watching. Make sure to LIKE the video and SUBSCRIBE! @Brent Rivera If you see this comment who had the ...$$2271796$$2020-07-25T19:41:48Z 여름옷$$Marvel & Hulu's Helstrom - Official Trailer | Comic Con 2020$$Marvel's Helstrom is a chilling supernatural thriller inspired by Marvel Comics' Son of Satan and Satana characters, premiering October 16 on Hulu. The new ...$$198789$$2020-07-24T23:00:12Z 여름옷$$Shinsuke Nakamura & Cesaro gloat as new champions: SmackDown, July 24, 2020$$The new SmackDown Tag Team Champions call out the rest of the blue brand tandems and revel in causing Kofi Kingston's injury. Catch WWE action on WWE ...$$157232$$2020-07-25T03:19:38Z 여름옷$$Dev Diaries #2: Nether Sound$$In this edition of Minecraft Dev Diaries we take a closer look, or rather listen, to the sounds of the Nether. Find out how the Nether differs from the naturalistic ...$$618185$$2020-07-24T15:00:05Z 여름옷$$Classic Yone, the Unforgotten - Ability Preview - League of Legends$$Yone, Unforgotten Ability Preview. Purchase RP here (Amazon Affiliate - NA): https://amzn.to/2qZ3Bmv For League of Legends Related News Check Out ...$$583172$$2020-07-24T20:24:22Z 여름옷$$THICCEST GOLD FISH IN FORTNITE$$Use Code: FRESH | SUBSCRIBE! https://goo.gl/gKMjmQ Follow me @ Twitch: https://www.twitch.tv/fresh Twitter: https://www.twitter.com/mrfreshasian Instagram: ...$$2222915$$2020-07-24T15:39:02Z 여름옷$$Taylor Swift shares a special message with ‘GMA’ about her new album, ‘Folklore’ l GMA$$The singer announced Thursday that she would be releasing her eighth studio album overnight and also released a video for her song “Cardigan.” READ ...$$181818$$2020-07-24T14:24:47Z 여름옷$$6 Stages Of A Cat Falling In Love With His Baby Sister | The Dodo$$Watch this cat very slowly fall in love with his new baby sister ❤️ You can keep up with Milo and Amelia's adventures on YouTube: thedo.do/malamutes.$$1192720$$2020-07-24T20:00:01Z 여름옷$$2 Chicago Christopher Columbus Statues Taken Down$$Two statues of Christopher Columbus were removed from Chicago neighborhoods. One was hoisted off its pedestal in a park in Downtown Chicago in the dead ...$$131017$$2020-07-25T09:10:37Z 여름옷$$Ava DuVernay: Trump's Assault On Portland Isn't A Republican Vs. Democrat Issue - EXTENDED INTERV…$$In this extended interview, Emmy and Peabody Award-winner Ava DuVernay, the filmmaker behind such films as "Selma," and "13th," joins Stephen for a wide ...$$578591$$2020-07-24T22:05:24Z 여름옷$$Taylor Swift shares a special message with ‘GMA’ about her new album, ‘Folklore’ l GMA$$The singer announced Thursday that she would be releasing her eighth studio album overnight and also released a video for her song “Cardigan.” READ ...$$181818$$2020-07-24T14:24:47Z 여름옷$$Why RV Sales Are Growing$$In the years that followed the financial crisis, sales of RVs began booming. Once considered a pretty dowdy way to travel, RVs have benefitted from slick industry ...$$572730$$2020-07-24T18:42:13Z 여름옷$$DDG - Moonwalking In Calabasas (Official Audio)$$Available on ALL streaming platforms: Spotify: https://open.spotify.com/album/1dF1jqzRm3QRbWnpuLWaBo?si=vxJfnOjWTXetB29H5uLEFQ Apple Music: ...$$357041$$2020-07-25T04:03:09Z

Process finished with exit code 0

amkorousagi commented 4 years ago

natural langueage 예제를 해봄 (서비스계정 만들고 json 다운)--> 환경변수로 설정후 gcloud 관련 다운 --> 코드 실행

psc@psc-800G5H-800G5S:~$ python app.py Text: 여름옷, 세일! Sentiment: 0.899999976158, 0.899999976158

여기서 sentiment method가 아니라 saliance 메소드로 중요도를 쳌하면 될듯.

amkorousagi commented 4 years ago

예시 2번째 이번에는 항목 분석을 해봄 python app2.py Representative name for the entity: summerlookbook #여름옷하울 #패션 heart 옷 정보 - 달트 / 하즈닝 플라워 원피스 -navy / 49000원 - 머랭 / 복숭아 체크 ops - long / 27500원 - 머랭 / 스티치 라인 코튼 Entity type: CONSUMER_GOOD Salience score: 0.275039374828 Mention text: summerlookbook #여름옷하울 #패션 heart 옷 정보 - 달트 / 하즈닝 플라워 원피스 - navy / 49000원 - 머랭 / 복숭아 체크 ops - long / 27500원 - 머랭 / 스티치 라인 코튼 Mention type: PROPER Representative name for the entity: 원피스 Entity type: OTHER Salience score: 0.271961659193 Mention text: 원피스 Mention type: COMMON Representative name for the entity: 여름옷 Entity type: OTHER Salience score: 0.252548187971 Mention text: 여름옷 Mention type: COMMON Representative name for the entity: 쇼핑 Entity type: OTHER Salience score: 0.200450778008 Mention text: 쇼핑 Mention type: COMMON Representative name for the entity: 49000원 Entity type: PRICE Salience score: 0.0 value: 49000.000000 currency: KRW Mention text: 49000원 Mention type: TYPE_UNKNOWN Representative name for the entity: 27500원 Entity type: PRICE Salience score: 0.0 value: 27500.000000 currency: KRW Mention text: 27500원 Mention type: TYPE_UNKNOWN Representative name for the entity: 30 Entity type: NUMBER Salience score: 0.0 value: 30 Mention text: 30 Mention type: TYPE_UNKNOWN Representative name for the entity: 49000 Entity type: NUMBER Salience score: 0.0 value: 49000 Mention text: 49000 Mention type: TYPE_UNKNOWN Representative name for the entity: 27500 Entity type: NUMBER Salience score: 0.0 value: 27500 Mention text: 27500 Mention type: TYPE_UNKNOWN Language of the text: ko

amkorousagi commented 4 years ago

https://cloud.google.com/natural-language/docs/reference/rest/v1/Entity?hl=ko#Type entitiy type에 대한 것이다. UNKNOWN과 CONSUMER_GOOD, PERSON에 해당하는 word 중, 중요도가 가장 높은 2개의 단어만 골라야 겠다.

언어도 langdetect를 통해 적절히 식별해야겠다

amkorousagi commented 4 years ago

현재 한글 인코딩 문제를 제외하고, natural language로 title과 description에서 키워드 추출하는 것은 완성되었음.

category: 여름옷 ko Representative name for the entity: 여름옷 Entity type: OTHER Salience score: 0.365738689899 Representative name for the entity: 원피스 Entity type: OTHER Salience score: 0.355580627918 Representative name for the entity: 쇼핑 Entity type: OTHER Salience score: 0.278680682182 Representative name for the entity: 30 Entity type: NUMBER Salience score: 0.0 keyword_title: ['\xec\x97\xac\xeb\xa6\x84\xec\x98\xb7', '\xec\x9b\x90\xed\x94\xbc\xec\x8a\xa4', '\xec\x87\xbc\xed\x95\x91'] ko Representative name for the entity: summerlookbook #여름옷하울 #패션 ❤ 옷 정보 - 달트 / 하즈닝 플라워 원피스 -navy / 49000원 - 머랭 / 복숭아 체크 ops - long / 27500원 - 머랭 / 스티치 라인 코튼 Entity type: CONSUMER_GOOD Salience score: 1.0 Representative name for the entity: 49000원 Entity type: PRICE Salience score: 0.0 Representative name for the entity: 27500원 Entity type: PRICE Salience score: 0.0 Representative name for the entity: 49000 Entity type: NUMBER Salience score: 0.0 Representative name for the entity: 27500 Entity type: NUMBER Salience score: 0.0 keyword_desc: ['summerlookbook #\xec\x97\xac\xeb\xa6\x84\xec\x98\xb7\xed\x95\x98\xec\x9a\xb8 #\xed\x8c\xa8\xec\x85\x98 \xe2\x9d\xa4 \xec\x98\xb7 \xec\xa0\x95\xeb\xb3\xb4 - \xeb\x8b\xac\xed\x8a\xb8 / \xed\x95\x98\xec\xa6\x88\xeb\x8b\x9d \xed\x94\x8c\xeb\x9d\xbc\xec\x9b\x8c \xec\x9b\x90\xed\x94\xbc\xec\x8a\xa4 -navy / 49000\xec\x9b\x90 - \xeb\xa8\xb8\xeb\x9e\xad / \xeb\xb3\xb5\xec\x88\xad\xec\x95\x84 \xec\xb2\xb4\xed\x81\xac ops - long / 27500\xec\x9b\x90 - \xeb\xa8\xb8\xeb\x9e\xad / \xec\x8a\xa4\xed\x8b\xb0\xec\xb9\x98 \xeb\x9d\xbc\xec\x9d\xb8 \xec\xbd\x94\xed\x8a\xbc'] viewCount: 145664 publish time: 2020-07-10T09:45:03Z category: 여름옷 ko Representative name for the entity: 하울👗)SPA브랜드 자라 Entity type: CONSUMER_GOOD Salience score: 0.256022572517 Representative name for the entity: 에잇세컨즈 Entity type: CONSUMER_GOOD Salience score: 0.247090145946 Representative name for the entity: 망고 Entity type: OTHER Salience score: 0.173368170857 Representative name for the entity: 사이즈 Entity type: OTHER Salience score: 0.167785465717 Representative name for the entity: 패션 Entity type: OTHER Salience score: 0.155733644962 Representative name for the entity: 159 Entity type: NUMBER Salience score: 0.0 Representative name for the entity: 59 Entity type: NUMBER Salience score: 0.0 Representative name for the entity: 66 Entity type: NUMBER Salience score: 0.0 Representative name for the entity: 에잇 Entity type: NUMBER Salience score: 0.0 keyword_title: ['\xed\x95\x98\xec\x9a\xb8\xf0\x9f\x91\x97)SPA\xeb\xb8\x8c\xeb\x9e\x9c\xeb\x93\x9c \xec\x9e\x90\xeb\x9d\xbc', '\xec\x97\x90\xec\x9e\x87\xec\x84\xb8\xec\xbb\xa8\xec\xa6\x88', '\xeb\xa7\x9d\xea\xb3\xa0', '\xec\x82\xac\xec\x9d\xb4\xec\xa6\x88', '\xed\x8c\xa8\xec\x85\x98']

amkorousagi commented 4 years ago

이제 한글 인코딩에 대해서는 db와 연동할때 다시 알아보기로하고, 이제 trend map을 만드는것을 고민해보겠음. 기본적으로 생각은 2차원 행렬을 통해 각채널간에 공통 구독자 수를 표시하는 것이 목표임, 하지만 단위가 너무 크면 비용이 많이 청구되기에 100명 이내에서 test하는 것을 목표로 하겠음

amkorousagi commented 4 years ago

비디오id--> comment --> comment's owner --> subscribe data 를 100번 정도 반복하여 2차원 행렬을 만들 것임.

amkorousagi commented 4 years ago

videoId로 comment의 author의 channel Id를 알아내는데 성공 아래는 그 결과

{ "nextPageToken": "QURTSl9pMDJtTG83d2M2RjFuMWc0bUMwbHBNeWdmMkVQNFVvQ3Q0elZMMGVuRGtuZE5PcFFKSTN3MUtjZFlsTUUxaThQbmNGUG1PWkIyZWIyZ21qSEt2Tm5sUWJQanB0WjNsOUZIby1MV19ULVFpd01BUXk0QktFbjN2ZHJGMGU=", "items": [ { "snippet": { "totalReplyCount": 0, "canReply": true, "topLevelComment": { "snippet": { "authorChannelUrl": "http://www.youtube.com/channel/UCdpCa748_36Ujkg1gEYva4A", "authorDisplayName": "체리체링", "updatedAt": "2020-08-02T08:12:47Z", "videoId": "r51UJMj9M6Y", "publishedAt": "2020-08-02T08:12:47Z", "viewerRating": "none", "authorChannelId": { "value": "UCdpCa748_36Ujkg1gEYva4A" }, "canRate": true, "textOriginal": "전신샷이 궁금했는데ㅠㅠ", "likeCount": 0, "authorProfileImageUrl": "https://yt3.ggpht.com/a/AATXAJz2t_3iiMQX5YSdR_hseSWbfGenrsil1p7Hfw=s48-c-k-c0xffffffff-no-rj-mo", "textDisplay": "전신샷이 궁금했는데ㅠㅠ" }, "kind": "youtube#comment", "etag": "xfjRH-1N-o9t7p7_adRB3Hwrios", "id": "UgwG1NESFT8E-OetEnB4AaABAg" }, "videoId": "r51UJMj9M6Y", "isPublic": true }, "kind": "youtube#commentThread", "etag": "yZrzb2ra5QDyp6usCA8r46y8oUc", "id": "UgwG1NESFT8E-OetEnB4AaABAg" }, { "snippet": { "totalReplyCount": 0, "canReply": true, "topLevelComment": { "snippet": { "authorChannelUrl": "http://www.youtube.com/channel/UCa0Jx7BDUCdIy5q9fMw312A", "authorDisplayName": "wenwen li", "updatedAt": "2020-08-02T00:35:40Z", "videoId": "r51UJMj9M6Y", "publishedAt": "2020-08-02T00:35:40Z", "viewerRating": "none", "authorChannelId": { "value": "UCa0Jx7BDUCdIy5q9fMw312A" }, "canRate": true, "textOriginal": "언니넘 예쁘세요 키가 몇센치이세요?", "likeCount": 0, "authorProfileImageUrl": "https://yt3.ggpht.com/a/AATXAJyFsTDxpbfj0_O-kQunEV9NL7jurBJ4n3Sftw=s48-c-k-c0xffffffff-no-rj-mo", "textDisplay": "언니넘 예쁘세요 키가 몇센치이세요?" }, "kind": "youtube#comment", "etag": "-kvT9ahXHuogTpAcu4ZjwcI0s2Q", "id": "UgzJwTjVVDb63c95eFp4AaABAg" }, "videoId": "r51UJMj9M6Y", "isPublic": true }, "kind": "youtube#commentThread", "etag": "pcHfJg6Fd9G-jtQZpx3njFgJe3Y", "id": "UgzJwTjVVDb63c95eFp4AaABAg" }, { "snippet": { "totalReplyCount": 0, "canReply": true, "topLevelComment": { "snippet": { "authorChannelUrl": "http://www.youtube.com/channel/UC4LgopE2--HN0u8O6HPdhpg", "authorDisplayName": "Jesse Elias", "updatedAt": "2020-08-01T06:53:15Z", "videoId": "r51UJMj9M6Y", "publishedAt": "2020-08-01T06:53:15Z", "viewerRating": "none", "authorChannelId": { "value": "UC4LgopE2--HN0u8O6HPdhpg" }, "canRate": true, "textOriginal": "Man I wish I can speak Korean so that I can communicate with you. You are so lovely. 😘", "likeCount": 0, "authorProfileImageUrl": "https://yt3.ggpht.com/a/AATXAJwjicezzLfFxXsHrhJTnh7xK7BaMqd-lHSEXA=s48-c-k-c0xffffffff-no-rj-mo", "textDisplay": "Man I wish I can speak Korean so that I can communicate with you. You are so lovely. 😘" }, "kind": "youtube#comment", "etag": "twKQ8_-IHnXZK0GmELF23e0DdDg", "id": "UgzMWFmVfB-KLn-GJvd4AaABAg" }, "videoId": "r51UJMj9M6Y", "isPublic": true }, "kind": "youtube#commentThread", "etag": "UUTRMiJCbuRKdCDUGvBEAaIboc", "id": "UgzMWFmVfB-KLn-GJvd4AaABAg" }, { "snippet": { "totalReplyCount": 0, "canReply": true, "topLevelComment": { "snippet": { "authorChannelUrl": "http://www.youtube.com/channel/UCWLeP0BC-TOYlMnlGMKpog", "authorDisplayName": "온스위치", "updatedAt": "2020-07-31T11:30:13Z", "videoId": "r51UJMj9M6Y", "publishedAt": "2020-07-31T11:30:13Z", "viewerRating": "none", "authorChannelId": { "value": "UCWLeP0BC_-TOYlMnlGMKpog" }, "canRate": true, "textOriginal": "왜 분홍이 아니고 하늘이지요?", "likeCount": 0, "authorProfileImageUrl": "https://yt3.ggpht.com/a/AATXAJx-pCpvFKslPleST80qHBKiyQSp-QGRI-fg1pNf=s48-c-k-c0xffffffff-no-rj-mo", "textDisplay": "왜 분홍이 아니고 하늘이지요?" }, "kind": "youtube#comment", "etag": "G8Fr2QGFTn-g8b0PTiyzmRFjyi8", "id": "UgzBFUyFt6dnJqfVetx4AaABAg" }, "videoId": "r51UJMj9M6Y", "isPublic": true }, "kind": "youtube#commentThread", "etag": "LVZ_PFMHyZl0VuaNDVb2k6aSp6s", "id": "UgzBFUyFt6dnJqfVetx4AaABAg" }, { "snippet": { "totalReplyCount": 0, "canReply": true, "topLevelComment": { "snippet": { "authorChannelUrl": "http://www.youtube.com/channel/UC33xLkYRiae4VACt53zpk5Q", "authorDisplayName": "하연정", "updatedAt": "2020-07-30T09:52:57Z", "videoId": "r51UJMj9M6Y", "publishedAt": "2020-07-30T09:52:57Z", "viewerRating": "none", "authorChannelId": { "value": "UC33xLkYRiae4VACt53zpk5Q" }, "canRate": true, "textOriginal": "키작녀 ㅠㅠ 완전 도움 됬오요 감사합니다!!", "likeCount": 2, "authorProfileImageUrl": "https://yt3.ggpht.com/a/AATXAJzTREi5vokGHI-vb7JAjTRQETjTp3ONPa-Y82mN1g=s48-c-k-c0xffffffff-no-rj-mo", "textDisplay": "키작녀 ㅠㅠ 완전 도움 됬오요 감사합니다!!" }, "kind": "youtube#comment", "etag": "KMcR9UWNeiVSQ6BW6_XFjn0B_N4", "id": "UgxYKLvhEpWGPV6uHD14AaABAg" }, "videoId": "r51UJMj9M6Y", "isPublic": true }, "kind": "youtube#commentThread", "etag": "nyb6yoaAyLS1riu9GPoXamTGcVo", "id": "UgxYKLvhEpWGPV6uHD14AaABAg" } ], "kind": "youtube#commentThreadListResponse", "etag": "wcKheQ5ph43dO0r1eCM2qap_Khg", "pageInfo": { "resultsPerPage": 5, "totalResults": 5 } }

amkorousagi commented 4 years ago

다음은 사용자 id로 구독정보를 detect한 결과이다

{ "items": [], "kind": "youtube#activityListResponse", "etag": "vyUA0fGtigDqOeprpLWk-tOhxKY", "pageInfo": { "resultsPerPage": 10, "totalResults": 0 } } { "items": [], "kind": "youtube#activityListResponse", "etag": "vyUA0fGtigDqOeprpLWk-tOhxKY", "pageInfo": { "resultsPerPage": 10, "totalResults": 0 } } { "items": [], "kind": "youtube#activityListResponse", "etag": "vyUA0fGtigDqOeprpLWk-tOhxKY", "pageInfo": { "resultsPerPage": 10, "totalResults": 0 } } { "nextPageToken": "CAoQAA", "items": [ { "contentDetails": { "subscription": { "resourceId": { "kind": "youtube#channel", "channelId": "UCJt0j8S_fbr0KGR-f7XBaaQ" } } }, "kind": "youtube#activity", "etag": "ww1H8OB6cOFwPOniXb-OKPUr8aA", "id": "MTMxNTk0NzE1MjUzMjMzNzcxNjk2ODExNjg=" }, { "contentDetails": { "subscription": { "resourceId": { "kind": "youtube#channel", "channelId": "UCZz8q2tZC7QuQiFwPKQ4Bug" } } }, "kind": "youtube#activity", "etag": "FGSbFF37DRXAr-38wplwbzDeoFg", "id": "MTMxNTk0Mjg0NTg1MjMzNzcxNjExOTExODQ=" }, { "contentDetails": { "subscription": { "resourceId": { "kind": "youtube#channel", "channelId": "UC_us_hH43AJtU_A-iXCLmqw" } } }, "kind": "youtube#activity", "etag": "4mlEND5q6WNzgKFmT-R1oZRN_zk", "id": "MTMxNTk0MTAyOTkxMjMzNzcxNjExODgwNDg=" }, { "contentDetails": { "subscription": { "resourceId": { "kind": "youtube#channel", "channelId": "UCuVgoagmU3hmfMwtxG9s4Sw" } } }, "kind": "youtube#activity", "etag": "yBpytN1x1V2rs4jNIJVYKpujdng", "id": "MTMxNTkxOTQ3MzYyMjMzNzcxNjExODc3Mjg=" }, { "contentDetails": { "subscription": { "resourceId": { "kind": "youtube#channel", "channelId": "UCO3tlaeZ6Z0ZN5frMZI3-uQ" } } }, "kind": "youtube#activity", "etag": "4WfCjwNqJyLut-5OYI5_065EQGw", "id": "MTMxNTkwNTY5MjM2MjMzNzcxNjExOTAwMzI=" }, { "contentDetails": { "subscription": { "resourceId": { "kind": "youtube#channel", "channelId": "UC6EyD09YAae38tfAmm383Tg" } } }, "kind": "youtube#activity", "etag": "H6iQcAVKwzc_sgMnSMLdZWvcPzo", "id": "MTMxNTkwMTk5ODg1MjMzNzcxNjExODkwMDg=" }, { "contentDetails": { "subscription": { "resourceId": { "kind": "youtube#channel", "channelId": "UCVnGdyLMChFJJbAtZ9jNz-g" } } }, "kind": "youtube#activity", "etag": "POWDJ4sUmD9X5RzMbMfVbUsMdd0", "id": "MTMxNTg5MDE2NTU5MjMzNzcxNjExODkyNjQ=" }, { "contentDetails": { "subscription": { "resourceId": { "kind": "youtube#channel", "channelId": "UC4nzIAyr420YzQjM-mLWq1g" } } }, "kind": "youtube#activity", "etag": "QlwkEuZoOqakDknhCq9grbz7j7M", "id": "MTMxNTg4NDA1MTE2MjMzNzcxNjExODk2NDg=" }, { "contentDetails": { "subscription": { "resourceId": { "kind": "youtube#channel", "channelId": "UCyznn3etx_6fSK7576JSrKg" } } }, "kind": "youtube#activity", "etag": "TabwPA9yCzqqYWSA5qrSqe94KqU", "id": "MTMxNTg3Njk5NDY3MjMzNzcxNjExODg2ODg=" }, { "contentDetails": { "subscription": { "resourceId": { "kind": "youtube#channel", "channelId": "UCWxuirAfcW7VK_jRaSjIEbA" } } }, "kind": "youtube#activity", "etag": "IEXsAHIFwD6DOnc3-eFMABMqByg", "id": "MTMxNTg2ODk0NzU0MjMzNzcxNjExODgxNzY=" } ], "kind": "youtube#activityListResponse", "etag": "p3J85NHr1pOPW-KhMzJ_2MkEWis", "pageInfo": { "resultsPerPage": 10, "totalResults": 30 } } { "items": [], "kind": "youtube#activityListResponse", "etag": "vyUA0fGtigDqOeprpLWk-tOhxKY", "pageInfo": { "resultsPerPage": 10, "totalResults": 0 } }

amkorousagi commented 4 years ago

default가 구독정보 공개인데 생각보다 구독정보 숨김을 한 유저가 많다. 특히 한국이 더 그런것 같기더 하다.

amkorousagi commented 4 years ago

현재 임시적인 각 채널간 공통 구독을 나타내는 이중 dictionary를 만들었다. 이후 2차원 벡터로 변형하여 쓰거나 db에 그대로 올리면 될것같다

{u'UC6EyD09YAae38tfAmm383Tg': {u'UCWxuirAfcW7VK_jRaSjIEbA': 1, u'UC4nzIAyr420YzQjM-mLWq1g': 1, u'UCVnGdyLMChFJJbAtZ9jNz-g': 1, u'UCO3tlaeZ6Z0ZN5frMZI3-uQ': 1, u'UCZz8q2tZC7QuQiFwPKQ4Bug': 1, u'UCyznn3etx_6fSK7576JSrKg': 1, u'UCJt0j8S_fbr0KGR-f7XBaaQ': 1, u'UCuVgoagmU3hmfMwtxG9s4Sw': 1, u'UC_us_hH43AJtU_A-iXCLmqw': 1}, u'UCWxuirAfcW7VK_jRaSjIEbA': {u'UC6EyD09YAae38tfAmm383Tg': 1, u'UC4nzIAyr420YzQjM-mLWq1g': 1, u'UCVnGdyLMChFJJbAtZ9jNz-g': 1, u'UCO3tlaeZ6Z0ZN5frMZI3-uQ': 1, u'UCZz8q2tZC7QuQiFwPKQ4Bug': 1, u'UCyznn3etx_6fSK7576JSrKg': 1, u'UCJt0j8S_fbr0KGR-f7XBaaQ': 1, u'UCuVgoagmU3hmfMwtxG9s4Sw': 1, u'UC_us_hH43AJtU_A-iXCLmqw': 1}, u'UCyznn3etx_6fSK7576JSrKg': {u'UC6EyD09YAae38tfAmm383Tg': 1, u'UCWxuirAfcW7VK_jRaSjIEbA': 1, u'UC4nzIAyr420YzQjM-mLWq1g': 1, u'UCVnGdyLMChFJJbAtZ9jNz-g': 1, u'UCO3tlaeZ6Z0ZN5frMZI3-uQ': 1, u'UCZz8q2tZC7QuQiFwPKQ4Bug': 1, u'UCJt0j8S_fbr0KGR-f7XBaaQ': 1, u'UCuVgoagmU3hmfMwtxG9s4Sw': 1, u'UC_us_hH43AJtU_A-iXCLmqw': 1}, u'UCJt0j8S_fbr0KGR-f7XBaaQ': {u'UC6EyD09YAae38tfAmm383Tg': 1, u'UCWxuirAfcW7VK_jRaSjIEbA': 1, u'UC4nzIAyr420YzQjM-mLWq1g': 1, u'UCVnGdyLMChFJJbAtZ9jNz-g': 1, u'UCO3tlaeZ6Z0ZN5frMZI3-uQ': 1, u'UCZz8q2tZC7QuQiFwPKQ4Bug': 1, u'UCyznn3etx_6fSK7576JSrKg': 1, u'UC_us_hH43AJtU_A-iXCLmqw': 1, u'UCuVgoagmU3hmfMwtxG9s4Sw': 1}, u'UC_us_hH43AJtU_A-iXCLmqw': {u'UC6EyD09YAae38tfAmm383Tg': 1, u'UCWxuirAfcW7VK_jRaSjIEbA': 1, u'UC4nzIAyr420YzQjM-mLWq1g': 1, u'UCVnGdyLMChFJJbAtZ9jNz-g': 1, u'UCO3tlaeZ6Z0ZN5frMZI3-uQ': 1, u'UCZz8q2tZC7QuQiFwPKQ4Bug': 1, u'UCyznn3etx_6fSK7576JSrKg': 1, u'UCJt0j8S_fbr0KGR-f7XBaaQ': 1, u'UCuVgoagmU3hmfMwtxG9s4Sw': 1}, u'UC4nzIAyr420YzQjM-mLWq1g': {u'UC6EyD09YAae38tfAmm383Tg': 1, u'UCWxuirAfcW7VK_jRaSjIEbA': 1, u'UCVnGdyLMChFJJbAtZ9jNz-g': 1, u'UCO3tlaeZ6Z0ZN5frMZI3-uQ': 1, u'UCZz8q2tZC7QuQiFwPKQ4Bug': 1, u'UCyznn3etx_6fSK7576JSrKg': 1, u'UCJt0j8S_fbr0KGR-f7XBaaQ': 1, u'UCuVgoagmU3hmfMwtxG9s4Sw': 1, u'UC_us_hH43AJtU_A-iXCLmqw': 1}, u'UCVnGdyLMChFJJbAtZ9jNz-g': {u'UC6EyD09YAae38tfAmm383Tg': 1, u'UCWxuirAfcW7VK_jRaSjIEbA': 1, u'UC4nzIAyr420YzQjM-mLWq1g': 1, u'UCyznn3etx_6fSK7576JSrKg': 1, u'UCO3tlaeZ6Z0ZN5frMZI3-uQ': 1, u'UCZz8q2tZC7QuQiFwPKQ4Bug': 1, u'UCJt0j8S_fbr0KGR-f7XBaaQ': 1, u'UCuVgoagmU3hmfMwtxG9s4Sw': 1, u'UC_us_hH43AJtU_A-iXCLmqw': 1}, u'UCO3tlaeZ6Z0ZN5frMZI3-uQ': {u'UC6EyD09YAae38tfAmm383Tg': 1, u'UCWxuirAfcW7VK_jRaSjIEbA': 1, u'UC4nzIAyr420YzQjM-mLWq1g': 1, u'UCVnGdyLMChFJJbAtZ9jNz-g': 1, u'UCZz8q2tZC7QuQiFwPKQ4Bug': 1, u'UCyznn3etx_6fSK7576JSrKg': 1, u'UCJt0j8S_fbr0KGR-f7XBaaQ': 1, u'UCuVgoagmU3hmfMwtxG9s4Sw': 1, u'UC_us_hH43AJtU_A-iXCLmqw': 1}, u'UCZz8q2tZC7QuQiFwPKQ4Bug': {u'UC6EyD09YAae38tfAmm383Tg': 1, u'UCWxuirAfcW7VK_jRaSjIEbA': 1, u'UC4nzIAyr420YzQjM-mLWq1g': 1, u'UCVnGdyLMChFJJbAtZ9jNz-g': 1, u'UCO3tlaeZ6Z0ZN5frMZI3-uQ': 1, u'UCyznn3etx_6fSK7576JSrKg': 1, u'UCJt0j8S_fbr0KGR-f7XBaaQ': 1, u'UCuVgoagmU3hmfMwtxG9s4Sw': 1, u'UC_us_hH43AJtU_A-iXCLmqw': 1}, u'UCuVgoagmU3hmfMwtxG9s4Sw': {u'UC6EyD09YAae38tfAmm383Tg': 1, u'UCWxuirAfcW7VK_jRaSjIEbA': 1, u'UC4nzIAyr420YzQjM-mLWq1g': 1, u'UCVnGdyLMChFJJbAtZ9jNz-g': 1, u'UCO3tlaeZ6Z0ZN5frMZI3-uQ': 1, u'UCZz8q2tZC7QuQiFwPKQ4Bug': 1, u'UCyznn3etx_6fSK7576JSrKg': 1, u'UCJt0j8S_fbr0KGR-f7XBaaQ': 1, u'UC_us_hH43AJtU_A-iXCLmqw': 1}}

amkorousagi commented 4 years ago

그러나 다음 page를 검색하는데 문제가 좀 있다. 이것 만 끝내면 trend-map은 완료다. 오늘은 이 page 문제를 끝내고 내일은 container 간 통신에 대해 공부하고 container cummunity

page문제를 고쳤다 오타였다 ...

amkorousagi commented 4 years ago

대충 한 유저에게 나온 trend map 정보

{u'UCtGoikgbxP4F3rgI9PldI9g': {u'UC7dHBh9QmYF1L0TOeGIzZgw': 1, u'UCG4wigbjnwzBIck_8t_IWSg': 1, u'UCcOdNCF5e5Ev-57AWf_LpkA': 1, u'UC4eYXhJI4-7wSWc8UNRwD4A': 1, u'UCWLPwsWzRmmKfrapcdICgaA': 1, u'UCtUId5WFnN82GdDy7DgaQ7w': 1, u'UC22BdTgxefuvUivrjesETjg': 1, u'UC0L1suV8pVgO4pCAIBNGx5w': 1, u'UCG-iSMVtWbbwDDXgXXypARQ': 1}, u'UCWxuirAfcW7VK_jRaSjIEbA': {u'UC6EyD09YAae38tfAmm383Tg': 1, u'UC4nzIAyr420YzQjM-mLWq1g': 1, u'UCVnGdyLMChFJJbAtZ9jNz-g': 1, u'UCO3tlaeZ6Z0ZN5frMZI3-uQ': 1, u'UCZz8q2tZC7QuQiFwPKQ4Bug': 1, u'UCyznn3etx_6fSK7576JSrKg': 1, u'UCJt0j8S_fbr0KGR-f7XBaaQ': 1, u'UCuVgoagmU3hmfMwtxG9s4Sw': 1, u'UC_us_hH43AJtU_A-iXCLmqw': 1}, u'UCcOdNCF5e5Ev-57AWf_LpkA': {u'UCtGoikgbxP4F3rgI9PldI9g': 1, u'UC7dHBh9QmYF1L0TOeGIzZgw': 1, u'UCG4wigbjnwzBIck_8t_IWSg': 1, u'UC4eYXhJI4-7wSWc8UNRwD4A': 1, u'UCWLPwsWzRmmKfrapcdICgaA': 1, u'UCtUId5WFnN82GdDy7DgaQ7w': 1, u'UC22BdTgxefuvUivrjesETjg': 1, u'UC0L1suV8pVgO4pCAIBNGx5w': 1, u'UCG-iSMVtWbbwDDXgXXypARQ': 1}, u'UC4eYXhJI4-7wSWc8UNRwD4A': {u'UCtGoikgbxP4F3rgI9PldI9g': 1, u'UC7dHBh9QmYF1L0TOeGIzZgw': 1, u'UCG4wigbjnwzBIck_8t_IWSg': 1, u'UCcOdNCF5e5Ev-57AWf_LpkA': 1, u'UCWLPwsWzRmmKfrapcdICgaA': 1, u'UCtUId5WFnN82GdDy7DgaQ7w': 1, u'UC22BdTgxefuvUivrjesETjg': 1, u'UC0L1suV8pVgO4pCAIBNGx5w': 1, u'UCG-iSMVtWbbwDDXgXXypARQ': 1}, u'UC8a87KN4-w-ExcGufTeX9KQ': {u'UC_gUM8rL-Lrg6O3adPW9K1g': 1, u'UC_UE7maDDe8OqqC8-TtXaKg': 1, u'UC21WwL9XSGpqcvZgJg6jhIw': 1, u'UCialsmUlTRABKPw31VDx1eQ': 1, u'UCiE86yS_VM7qjiICqRPmwLQ': 1, u'UC89T-BR3lxaq89mqx6qPGfA': 1, u'UCjDQKxiTVpXutZc2Ra9wCAg': 1, u'UClrMJRlvoyoWsVlB-7c61PQ': 1}, u'UCjDQKxiTVpXutZc2Ra9wCAg': {u'UC_gUM8rL-Lrg6O3adPW9K1g': 1, u'UC21WwL9XSGpqcvZgJg6jhIw': 1, u'UCialsmUlTRABKPw31VDx1eQ': 1, u'UCiE86yS_VM7qjiICqRPmwLQ': 1, u'UC8a87KN4-w-ExcGufTeX9KQ': 1, u'UC89T-BR3lxaq89mqx6qPGfA': 1, u'UC_UE7maDDe8OqqC8-TtXaKg': 1, u'UClrMJRlvoyoWsVlB-7c61PQ': 1}, u'UCJt0j8S_fbr0KGR-f7XBaaQ': {u'UC6EyD09YAae38tfAmm383Tg': 1, u'UCWxuirAfcW7VK_jRaSjIEbA': 1, u'UC4nzIAyr420YzQjM-mLWq1g': 1, u'UCVnGdyLMChFJJbAtZ9jNz-g': 1, u'UCO3tlaeZ6Z0ZN5frMZI3-uQ': 1, u'UCZz8q2tZC7QuQiFwPKQ4Bug': 1, u'UCyznn3etx_6fSK7576JSrKg': 1, u'UC_us_hH43AJtU_A-iXCLmqw': 1, u'UCuVgoagmU3hmfMwtxG9s4Sw': 1}, u'UCiE86yS_VM7qjiICqRPmwLQ': {u'UC_gUM8rL-Lrg6O3adPW9K1g': 1, u'UC_UE7maDDe8OqqC8-TtXaKg': 1, u'UC21WwL9XSGpqcvZgJg6jhIw': 1, u'UCialsmUlTRABKPw31VDx1eQ': 1, u'UC8a87KN4-w-ExcGufTeX9KQ': 1, u'UC89T-BR3lxaq89mqx6qPGfA': 1, u'UCjDQKxiTVpXutZc2Ra9wCAg': 1, u'UClrMJRlvoyoWsVlB-7c61PQ': 1}, u'UC7dHBh9QmYF1L0TOeGIzZgw': {u'UCtGoikgbxP4F3rgI9PldI9g': 1, u'UCG4wigbjnwzBIck_8t_IWSg': 1, u'UCcOdNCF5e5Ev-57AWf_LpkA': 1, u'UC4eYXhJI4-7wSWc8UNRwD4A': 1, u'UCWLPwsWzRmmKfrapcdICgaA': 1, u'UCtUId5WFnN82GdDy7DgaQ7w': 1, u'UC22BdTgxefuvUivrjesETjg': 1, u'UC0L1suV8pVgO4pCAIBNGx5w': 1, u'UCG-iSMVtWbbwDDXgXXypARQ': 1}, u'UC4nzIAyr420YzQjM-mLWq1g': {u'UC6EyD09YAae38tfAmm383Tg': 1, u'UCWxuirAfcW7VK_jRaSjIEbA': 1, u'UCVnGdyLMChFJJbAtZ9jNz-g': 1, u'UCO3tlaeZ6Z0ZN5frMZI3-uQ': 1, u'UCZz8q2tZC7QuQiFwPKQ4Bug': 1, u'UCyznn3etx_6fSK7576JSrKg': 1, u'UCJt0j8S_fbr0KGR-f7XBaaQ': 1, u'UCuVgoagmU3hmfMwtxG9s4Sw': 1, u'UC_us_hH43AJtU_A-iXCLmqw': 1}, u'UCG4wigbjnwzBIck_8t_IWSg': {u'UCtGoikgbxP4F3rgI9PldI9g': 1, u'UC7dHBh9QmYF1L0TOeGIzZgw': 1, u'UCcOdNCF5e5Ev-57AWf_LpkA': 1, u'UC4eYXhJI4-7wSWc8UNRwD4A': 1, u'UCWLPwsWzRmmKfrapcdICgaA': 1, u'UCtUId5WFnN82GdDy7DgaQ7w': 1, u'UC22BdTgxefuvUivrjesETjg': 1, u'UCG-iSMVtWbbwDDXgXXypARQ': 1, u'UC0L1suV8pVgO4pCAIBNGx5w': 1}, u'UCtUId5WFnN82GdDy7DgaQ7w': {u'UCtGoikgbxP4F3rgI9PldI9g': 1, u'UC7dHBh9QmYF1L0TOeGIzZgw': 1, u'UCG4wigbjnwzBIck_8t_IWSg': 1, u'UCcOdNCF5e5Ev-57AWf_LpkA': 1, u'UC4eYXhJI4-7wSWc8UNRwD4A': 1, u'UCWLPwsWzRmmKfrapcdICgaA': 1, u'UC22BdTgxefuvUivrjesETjg': 1, u'UC0L1suV8pVgO4pCAIBNGx5w': 1, u'UCG-iSMVtWbbwDDXgXXypARQ': 1}, u'UC_UE7maDDe8OqqC8-TtXaKg': {u'UC_gUM8rL-Lrg6O3adPW9K1g': 1, u'UC21WwL9XSGpqcvZgJg6jhIw': 1, u'UCialsmUlTRABKPw31VDx1eQ': 1, u'UCiE86yS_VM7qjiICqRPmwLQ': 1, u'UC8a87KN4-w-ExcGufTeX9KQ': 1, u'UC89T-BR3lxaq89mqx6qPGfA': 1, u'UCjDQKxiTVpXutZc2Ra9wCAg': 1, u'UClrMJRlvoyoWsVlB-7c61PQ': 1}, u'UCG-iSMVtWbbwDDXgXXypARQ': {u'UCtGoikgbxP4F3rgI9PldI9g': 1, u'UC7dHBh9QmYF1L0TOeGIzZgw': 1, u'UCG4wigbjnwzBIck_8t_IWSg': 1, u'UCcOdNCF5e5Ev-57AWf_LpkA': 1, u'UC4eYXhJI4-7wSWc8UNRwD4A': 1, u'UCWLPwsWzRmmKfrapcdICgaA': 1, u'UCtUId5WFnN82GdDy7DgaQ7w': 1, u'UC22BdTgxefuvUivrjesETjg': 1, u'UC0L1suV8pVgO4pCAIBNGx5w': 1}, u'UCuVgoagmU3hmfMwtxG9s4Sw': {u'UC6EyD09YAae38tfAmm383Tg': 1, u'UCWxuirAfcW7VK_jRaSjIEbA': 1, u'UC4nzIAyr420YzQjM-mLWq1g': 1, u'UCVnGdyLMChFJJbAtZ9jNz-g': 1, u'UCO3tlaeZ6Z0ZN5frMZI3-uQ': 1, u'UCZz8q2tZC7QuQiFwPKQ4Bug': 1, u'UCyznn3etx_6fSK7576JSrKg': 1, u'UCJt0j8S_fbr0KGR-f7XBaaQ': 1, u'UC_us_hH43AJtU_A-iXCLmqw': 1}, u'UC6EyD09YAae38tfAmm383Tg': {u'UCWxuirAfcW7VK_jRaSjIEbA': 1, u'UC4nzIAyr420YzQjM-mLWq1g': 1, u'UCVnGdyLMChFJJbAtZ9jNz-g': 1, u'UCO3tlaeZ6Z0ZN5frMZI3-uQ': 1, u'UCZz8q2tZC7QuQiFwPKQ4Bug': 1, u'UCyznn3etx_6fSK7576JSrKg': 1, u'UCJt0j8S_fbr0KGR-f7XBaaQ': 1, u'UCuVgoagmU3hmfMwtxG9s4Sw': 1, u'UC_us_hH43AJtU_A-iXCLmqw': 1}, u'UCyznn3etx_6fSK7576JSrKg': {u'UC6EyD09YAae38tfAmm383Tg': 1, u'UCWxuirAfcW7VK_jRaSjIEbA': 1, u'UC4nzIAyr420YzQjM-mLWq1g': 1, u'UCVnGdyLMChFJJbAtZ9jNz-g': 1, u'UCO3tlaeZ6Z0ZN5frMZI3-uQ': 1, u'UCZz8q2tZC7QuQiFwPKQ4Bug': 1, u'UCJt0j8S_fbr0KGR-f7XBaaQ': 1, u'UCuVgoagmU3hmfMwtxG9s4Sw': 1, u'UC_us_hH43AJtU_A-iXCLmqw': 1}, u'UC_us_hH43AJtU_A-iXCLmqw': {u'UC6EyD09YAae38tfAmm383Tg': 1, u'UCWxuirAfcW7VK_jRaSjIEbA': 1, u'UC4nzIAyr420YzQjM-mLWq1g': 1, u'UCVnGdyLMChFJJbAtZ9jNz-g': 1, u'UCO3tlaeZ6Z0ZN5frMZI3-uQ': 1, u'UCZz8q2tZC7QuQiFwPKQ4Bug': 1, u'UCyznn3etx_6fSK7576JSrKg': 1, u'UCJt0j8S_fbr0KGR-f7XBaaQ': 1, u'UCuVgoagmU3hmfMwtxG9s4Sw': 1}, u'UC89T-BR3lxaq89mqx6qPGfA': {u'UC_gUM8rL-Lrg6O3adPW9K1g': 1, u'UC_UE7maDDe8OqqC8-TtXaKg': 1, u'UC21WwL9XSGpqcvZgJg6jhIw': 1, u'UCialsmUlTRABKPw31VDx1eQ': 1, u'UCiE86yS_VM7qjiICqRPmwLQ': 1, u'UC8a87KN4-w-ExcGufTeX9KQ': 1, u'UCjDQKxiTVpXutZc2Ra9wCAg': 1, u'UClrMJRlvoyoWsVlB-7c61PQ': 1}, u'UC22BdTgxefuvUivrjesETjg': {u'UCtGoikgbxP4F3rgI9PldI9g': 1, u'UC7dHBh9QmYF1L0TOeGIzZgw': 1, u'UCG4wigbjnwzBIck_8t_IWSg': 1, u'UCcOdNCF5e5Ev-57AWf_LpkA': 1, u'UC4eYXhJI4-7wSWc8UNRwD4A': 1, u'UCWLPwsWzRmmKfrapcdICgaA': 1, u'UCtUId5WFnN82GdDy7DgaQ7w': 1, u'UC0L1suV8pVgO4pCAIBNGx5w': 1, u'UCG-iSMVtWbbwDDXgXXypARQ': 1}, u'UCialsmUlTRABKPw31VDx1eQ': {u'UC_gUM8rL-Lrg6O3adPW9K1g': 1, u'UC_UE7maDDe8OqqC8-TtXaKg': 1, u'UC21WwL9XSGpqcvZgJg6jhIw': 1, u'UCiE86yS_VM7qjiICqRPmwLQ': 1, u'UC8a87KN4-w-ExcGufTeX9KQ': 1, u'UC89T-BR3lxaq89mqx6qPGfA': 1, u'UCjDQKxiTVpXutZc2Ra9wCAg': 1, u'UClrMJRlvoyoWsVlB-7c61PQ': 1}, u'UC_gUM8rL-Lrg6O3adPW9K1g': {u'UC_UE7maDDe8OqqC8-TtXaKg': 1, u'UC21WwL9XSGpqcvZgJg6jhIw': 1, u'UCialsmUlTRABKPw31VDx1eQ': 1, u'UCiE86yS_VM7qjiICqRPmwLQ': 1, u'UC8a87KN4-w-ExcGufTeX9KQ': 1, u'UC89T-BR3lxaq89mqx6qPGfA': 1, u'UCjDQKxiTVpXutZc2Ra9wCAg': 1, u'UClrMJRlvoyoWsVlB-7c61PQ': 1}, u'UCVnGdyLMChFJJbAtZ9jNz-g': {u'UC6EyD09YAae38tfAmm383Tg': 1, u'UCWxuirAfcW7VK_jRaSjIEbA': 1, u'UC4nzIAyr420YzQjM-mLWq1g': 1, u'UCyznn3etx_6fSK7576JSrKg': 1, u'UCO3tlaeZ6Z0ZN5frMZI3-uQ': 1, u'UCZz8q2tZC7QuQiFwPKQ4Bug': 1, u'UCJt0j8S_fbr0KGR-f7XBaaQ': 1, u'UCuVgoagmU3hmfMwtxG9s4Sw': 1, u'UC_us_hH43AJtU_A-iXCLmqw': 1}, u'UCO3tlaeZ6Z0ZN5frMZI3-uQ': {u'UC6EyD09YAae38tfAmm383Tg': 1, u'UCWxuirAfcW7VK_jRaSjIEbA': 1, u'UC4nzIAyr420YzQjM-mLWq1g': 1, u'UCVnGdyLMChFJJbAtZ9jNz-g': 1, u'UCZz8q2tZC7QuQiFwPKQ4Bug': 1, u'UCyznn3etx_6fSK7576JSrKg': 1, u'UCJt0j8S_fbr0KGR-f7XBaaQ': 1, u'UCuVgoagmU3hmfMwtxG9s4Sw': 1, u'UC_us_hH43AJtU_A-iXCLmqw': 1}, u'UCZz8q2tZC7QuQiFwPKQ4Bug': {u'UC6EyD09YAae38tfAmm383Tg': 1, u'UCWxuirAfcW7VK_jRaSjIEbA': 1, u'UC4nzIAyr420YzQjM-mLWq1g': 1, u'UCVnGdyLMChFJJbAtZ9jNz-g': 1, u'UCO3tlaeZ6Z0ZN5frMZI3-uQ': 1, u'UCyznn3etx_6fSK7576JSrKg': 1, u'UCJt0j8S_fbr0KGR-f7XBaaQ': 1, u'UCuVgoagmU3hmfMwtxG9s4Sw': 1, u'UC_us_hH43AJtU_A-iXCLmqw': 1}, u'UCWLPwsWzRmmKfrapcdICgaA': {u'UCtGoikgbxP4F3rgI9PldI9g': 1, u'UC7dHBh9QmYF1L0TOeGIzZgw': 1, u'UCG4wigbjnwzBIck_8t_IWSg': 1, u'UCcOdNCF5e5Ev-57AWf_LpkA': 1, u'UC4eYXhJI4-7wSWc8UNRwD4A': 1, u'UCtUId5WFnN82GdDy7DgaQ7w': 1, u'UC22BdTgxefuvUivrjesETjg': 1, u'UC0L1suV8pVgO4pCAIBNGx5w': 1, u'UCG-iSMVtWbbwDDXgXXypARQ': 1}, u'UC21WwL9XSGpqcvZgJg6jhIw': {u'UC_gUM8rL-Lrg6O3adPW9K1g': 1, u'UC_UE7maDDe8OqqC8-TtXaKg': 1, u'UCialsmUlTRABKPw31VDx1eQ': 1, u'UCiE86yS_VM7qjiICqRPmwLQ': 1, u'UC8a87KN4-w-ExcGufTeX9KQ': 1, u'UC89T-BR3lxaq89mqx6qPGfA': 1, u'UCjDQKxiTVpXutZc2Ra9wCAg': 1, u'UClrMJRlvoyoWsVlB-7c61PQ': 1}, u'UC0L1suV8pVgO4pCAIBNGx5w': {u'UCtGoikgbxP4F3rgI9PldI9g': 1, u'UC7dHBh9QmYF1L0TOeGIzZgw': 1, u'UCG4wigbjnwzBIck_8t_IWSg': 1, u'UCcOdNCF5e5Ev-57AWf_LpkA': 1, u'UC4eYXhJI4-7wSWc8UNRwD4A': 1, u'UCWLPwsWzRmmKfrapcdICgaA': 1, u'UCtUId5WFnN82GdDy7DgaQ7w': 1, u'UC22BdTgxefuvUivrjesETjg': 1, u'UCG-iSMVtWbbwDDXgXXypARQ': 1}, u'UClrMJRlvoyoWsVlB-7c61PQ': {u'UC_gUM8rL-Lrg6O3adPW9K1g': 1, u'UC_UE7maDDe8OqqC8-TtXaKg': 1, u'UC21WwL9XSGpqcvZgJg6jhIw': 1, u'UCiE86yS_VM7qjiICqRPmwLQ': 1, u'UC8a87KN4-w-ExcGufTeX9KQ': 1, u'UC89T-BR3lxaq89mqx6qPGfA': 1, u'UCjDQKxiTVpXutZc2Ra9wCAg': 1, u'UCialsmUlTRABKPw31VDx1eQ': 1}}

amkorousagi commented 4 years ago

이제 저걸로 그래프 그릴때, 중복 체크하고 각 채널간 크기는 구독자수로 해서 이쁘게 그리면 된다

amkorousagi commented 4 years ago

거의 끝난듯 일단 이슈 닫겠음

amkorousagi commented 4 years ago

추가할 사항:

  1. order=date로 초기화할때 이전의 자료들 전부 머신러닝 시키기. 2.db와 연동하여 channel list를 받아오거나, 키워드나 구독정보 넣기