안녕하세요!!
오늘은 미국의 유명 커뮤니티 Reddit 의 데이터를 api를 활용해서 수집해보겠습니다!!
(회원가입!은 생략합니다!! 추천은 google 연동 말고 id/pw를 만들어 가입하세요!!)
A. Reddit API란?
Reddit API는 Reddit의 개시글들을 숩게 접근할수 있도록 해줍니다!!!
B. 무료 인가!!!?
Reddit API는 기본적으로 무료로 사용할 수 있습니다. 무료 제공 범위가 충분합니다.!!!
주요기능은~~~
- 서브레딧 데이터 접근: 특정 서브레딧에서 인기 있는 게시물이나 최근 게시물의 정보를 가져올 수 있습니다. 예를 들어, /r/python 서브레딧의 최신 게시글을 자동으로 수집할 수 있습니다.
- 사용자 정보 조회: 특정 사용자의 정보(게시물, 댓글, karma 점수 등)를 확인할 수 있습니다.
- 댓글 및 게시물 수집: 게시물의 댓글과 관련 데이터를 수집할 수 있습니다.
- API 호출 제한: Reddit API는 무료 사용자에게 1분에 약 60회의 호출을 허용합니다.
C. Reddit API 유료는??>?
전문적인 사용자를 위한 유료 API 서비스도 제공하는데,,, 이건 대량수집, 상업적 목정일떄입니다!!
그래서 로출 제한을 높이고 실시간 정보를 받고, 고객지원을 받을수 있습니다!!
D. 무료와 유료 API 비교
무료!!! | 유료!!! | |
API 호출 횟수 | 1분에 약 60회 | 더 많은 호출 횟수 가능 |
데이터 접근 | 기본 게시물, 댓글, 사용자 정보 | 고급 데이터 및 실시간 트렌드 분석 |
지원 서비스 | 기본 지원 | 우선 지원 |
사용 목적 | 개인 프로젝트, 소규모 서비스 | 상업적 사용, 대규모 데이터 수집 |
이제!! 본격적으로 시작해보아요!!
1. Reddit API에 앱 등록
https://old.reddit.com/prefs/apps/
개발자패이지에서
create app 클릭!
기본 정보를 입력하고@! create app!! (redirect uri는 우선 그냥 네이버로 실시!@!
그럼 이제 키가 생성됩니다!!
지금까지 나온 정보로 알수있는 나의 정보는
계정ID : DocumentKey6026
계정의 PW : 내가 알고있음!!
client_id와 client_pw (위 이미지의 두 화살표들!!)
2. Reddit API에 앱 등록
- 아래와 같이 해서 Token 을 받습니다!!
import requests
from requests.auth import HTTPBasicAuth
# Reddit 앱의 정보 (client_id와 client_secret)
client_id = 'h_jSPAsN_l8grD0uAzmosA(<< 이부분은 ID)'
client_secret = '{시크릿키!!}'
# Reddit 사용자 로그인 정보
username = 'DocumentKey6026'
password = '{내 계정비번}'
# POST 데이터 (password grant_type 사용)
data = {
'grant_type': 'password',
'username': username,
'password': password
}
# POST 요청 헤더
headers = {
'User-Agent': 'DocumentKey6026'
}
# HTTP Basic 인증 (client_id와 client_secret 사용)
auth = HTTPBasicAuth(client_id, client_secret)
# POST 요청 보내기
response_auth = requests.post(
'https://www.reddit.com/api/v1/access_token',
headers=headers,
data=data,
auth=auth
)
# 응답 출력
if response_auth.status_code == 200:
print("Access token:", response_auth.json())
else:
print(f"Error: {response_auth.status_code}")
print(response_auth.text)
이렇게하면~~
아래와 같이 나만의 토큰을 발급받게됩니다!!
3. 내 계정정보조회!!
이제, 이 토큰으로 모든것을 할수 있습니다!
내 계정 정보를 조회해보아요!!
# 토큰 정보
token = response_auth.json()['access_token']
# 요청 헤더
headers = {
'Authorization': f'Bearer {token}'
}
# 요청을 보낼 URL (예시)
url = 'https://www.reddit.com/api/v1/me'
# GET 요청 보내기
response = requests.get("https://oauth.reddit.com/api/v1/me", headers=headers)
response.json()
언제가입했는지, 글을 얼마나썻는지 등등을 다 볼수 있어요!!
4. Best글 보기!!!
아래와 같이 간단한 코드로 진행 가능합니다!!!!
# 요청을 보낼 URL
url = 'https://oauth.reddit.com/best'
# GET 요청 보내기
response = requests.get(url, headers=headers)
best_json = response.json()
best_json
데이터 이해를 위해 DF로 만들어보면!?
import pandas as pd
df_best = pd.DataFrame(best_json['data']['children'])
df_best
아래와 같이 25개의 컨텐츠를 가져옴을 확인할 수 있습니다!!
그리고 각각의 ROW는 아래와 같이 컨텐츠에 대한 세부사항정보가 있었습니다!!
세부정보는~~ 작성자 ID, URL, 작성시간 좋아요수, 썸네일이미지 등등의 정보가있네요~!^^
{'approved_at_utc': None,
'subreddit': 'gadgets',
'selftext': '',
'author_fullname': 't2_2uwit82z',
'saved': False,
'mod_reason_title': None,
'gilded': 0,
'clicked': False,
'title': 'PS5 disc drive is selling out after PS5 Pro announcement ',
'link_flair_richtext': [],
'subreddit_name_prefixed': 'r/gadgets',
'hidden': False,
'pwls': 6,
'link_flair_css_class': 'gaming',
'downs': 0,
'thumbnail_height': 78,
'top_awarded_type': None,
'hide_score': False,
'name': 't3_1feilcl',
'quarantine': False,
'link_flair_text_color': 'dark',
'upvote_ratio': 0.91,
'author_flair_background_color': None,
'ups': 2050,
'total_awards_received': 0,
'media_embed': {},
'thumbnail_width': 140,
'author_flair_template_id': None,
'is_original_content': False,
'user_reports': [],
'secure_media': None,
'is_reddit_media_domain': False,
'is_meta': False,
'category': None,
'secure_media_embed': {},
'link_flair_text': 'Gaming',
'can_mod_post': False,
'score': 2050,
'approved_by': None,
'is_created_from_ads_ui': False,
'author_premium': True,
'thumbnail': 'https://a.thumbs.redditmedia.com/ehtraS8BbbDYBCcUezEFJYy1As-Tndb2cDgQRPiSu38.jpg',
'edited': False,
'author_flair_css_class': None,
'author_flair_richtext': [],
'gildings': {},
'post_hint': 'link',
'content_categories': None,
'is_self': False,
'subreddit_type': 'public',
'created': 1726082307.0,
'link_flair_type': 'text',
'wls': 6,
'removed_by_category': None,
'banned_by': None,
'author_flair_type': 'text',
'domain': 'insider-gaming.com',
'allow_live_comments': False,
'selftext_html': None,
'likes': None,
'suggested_sort': None,
'banned_at_utc': None,
'url_overridden_by_dest': 'https://insider-gaming.com/ps5-disc-drive-is-selling-out-after-ps5-pro-announcement/',
'view_count': None,
'archived': False,
'no_follow': False,
'is_crosspostable': True,
'pinned': False,
'over_18': False,
'preview': {'images': [{'source': {'url': 'https://external-preview.redd.it/FBud8-iv8x3Pw1jA-wF-KuMmzopIIIRdjeSii542ZSc.jpg?auto=webp&s=fc3870a9d242b70d2f22359e6bfda5ec23611134',
'width': 1723,
'height': 969},
'resolutions': [{'url': 'https://external-preview.redd.it/FBud8-iv8x3Pw1jA-wF-KuMmzopIIIRdjeSii542ZSc.jpg?width=108&crop=smart&auto=webp&s=3a4fa92800c12545c22ee673292b5f3769ff53db',
'width': 108,
'height': 60},
{'url': 'https://external-preview.redd.it/FBud8-iv8x3Pw1jA-wF-KuMmzopIIIRdjeSii542ZSc.jpg?width=216&crop=smart&auto=webp&s=e1d0f203da7fd925b60cc0953f9ffc896e81a6a6',
'width': 216,
'height': 121},
{'url': 'https://external-preview.redd.it/FBud8-iv8x3Pw1jA-wF-KuMmzopIIIRdjeSii542ZSc.jpg?width=320&crop=smart&auto=webp&s=20c91662388dd3e7706e0a25a46d1c548618920d',
'width': 320,
'height': 179},
{'url': 'https://external-preview.redd.it/FBud8-iv8x3Pw1jA-wF-KuMmzopIIIRdjeSii542ZSc.jpg?width=640&crop=smart&auto=webp&s=85d0a0d526195dd5b2a05bd09e50d0b854ce69d5',
'width': 640,
'height': 359},
{'url': 'https://external-preview.redd.it/FBud8-iv8x3Pw1jA-wF-KuMmzopIIIRdjeSii542ZSc.jpg?width=960&crop=smart&auto=webp&s=31942fe65cee7738ef1270365a0282121add2630',
'width': 960,
'height': 539},
{'url': 'https://external-preview.redd.it/FBud8-iv8x3Pw1jA-wF-KuMmzopIIIRdjeSii542ZSc.jpg?width=1080&crop=smart&auto=webp&s=5917d184b139b9fc24912be863595aa2f1d8e5c5',
'width': 1080,
'height': 607}],
'variants': {},
'id': '-hglatMX5TsjcYductzPPzz6aLXoR2icoLX3fC0pxkw'}],
'enabled': False},
'all_awardings': [],
'awarders': [],
'media_only': False,
'link_flair_template_id': '7de51ac0-5bb7-11e4-824f-12313b0eb533',
'can_gild': False,
'spoiler': False,
'locked': False,
'author_flair_text': None,
'treatment_tags': [],
'visited': False,
'removed_by': None,
'mod_note': None,
'distinguished': None,
'subreddit_id': 't5_2qgzt',
'author_is_blocked': False,
'mod_reason_by': None,
'num_reports': None,
'removal_reason': None,
'link_flair_background_color': '',
'id': '1feilcl',
'is_robot_indexable': True,
'report_reasons': None,
'author': 'chrisdh79',
'discussion_type': None,
'num_comments': 391,
'send_replies': False,
'whitelist_status': 'all_ads',
'contest_mode': False,
'mod_reports': [],
'author_patreon_flair': False,
'author_flair_text_color': None,
'permalink': '/r/gadgets/comments/1feilcl/ps5_disc_drive_is_selling_out_after_ps5_pro/',
'parent_whitelist_status': 'all_ads',
'stickied': False,
'url': 'https://insider-gaming.com/ps5-disc-drive-is-selling-out-after-ps5-pro-announcement/',
'subreddit_subscribers': 22566401,
'created_utc': 1726082307.0,
'num_crossposts': 0,
'media': None,
'is_video': False}
ㅁ 참고 : https://github.com/reddit-archive/reddit/wiki/OAuth2
ㅁ 참고2 : https://www.reddit.com/dev/api/
'데이터&AI > 데이터분석' 카테고리의 다른 글
Twitter(x)의 데이터를 분석해보기 - 2 (feat. python & MONEY!!) (1) | 2024.09.04 |
---|---|
Twitter(x)의 데이터를 분석해보기 - 1 (feat. python) (1) | 2024.09.03 |
duckDB를 사용해보기 (feat. 가볍다, 근대 성능은 좋아!!? ) (0) | 2024.08.30 |
데이터 분석가를 위한 쉬운 docker : 편리한 notebook 환경 만들기!! (1) | 2024.06.06 |
Python사용자 입장에서 이해하는 Front-end (with Pandas, React) (0) | 2024.05.24 |
댓글