구글 클라우드 콘솔에서 프로젝트를 만들고 Google Sheets API를 활성화 해야함.
pip install gspread google-auth
터먹스에는 위 명령어로 설치

이런 페이지 떠도 무료니 일단 동의 및 계속하기.
https://console.cloud.google.com/?authuser=1
https://accounts.google.com/v3/signin/identifier?continue=https%3A%2F%2Fconsole.cloud.google.com%2F%3Fauthuser%3D1&dsh=S238904382%3A1770277599227893&followup=https%3A%2F%2Fconsole.cloud.google.com%2F%3Fauthuser%3D1&ifkv=AXbMIuDkinUmtabk-Z5X8NM2MSsOHTZWkgaRda1VRBXFESjcLtTvD5ZBSbjGsK3HnQShq4XGL__RBA&osid=1&passive=1209600&service=cloudconsole&flowName=WebLiteSignIn&flowEntry=ServiceLogin
accounts.google.com
구글 클라우드 콘솔 가입.
상단 로고 옆의 [프로젝트 선택] -> **[새 프로젝트]**를 클릭합니다.
프로젝트 이름(예: MyStockMonitor)을 적고 **[만들기]**를 누릅니다.
API 활성화
검색창에 **"Google Sheets API"**를 검색합니다.
결과에서 해당 API를 선택한 후 [사용] 버튼을 클릭합니다.
같은 방법으로 **"Google Drive API"**도 검색하여 **[사용]**을 눌러주세요. (시트 접근을 위해 필요합니다.)
서비스 계정 생성 (비서 만들기)
왼쪽 메뉴에서 [IAM 및 관리자] -> **[서비스 계정]**으로 들어갑니다.
상단의 **[서비스 계정 만들기]**를 클릭합니다.
이름을 적고 **[만들기 및 계속하기]**를 누른 뒤, 역할은 **[편집자]**로 설정하고 완료합니다.
비밀 키(JSON) 다운로드
방금 만든 서비스 계정의 이메일 주소를 클릭합니다.
상단 탭 중 [키] -> [키 추가] -> **[새 키 만들기]**를 누릅니다.
JSON 형식을 선택하고 **[만들기]**를 누르면 파일이 다운로드됩니다.
주의: 이 파일을 credentials.json으로 이름을 바꿔서 터먹스(Termux) 폴더로 옮겨야 합니다.
시트 공유하기 (가장 중요!)
다운로드한 JSON 파일을 열어보면 "client_email": "..." 부분이 있습니다.
사용자님의 구글 스프레드시트로 이동합니다.
오른쪽 상단 [공유] 버튼을 누르고, 위에서 복사한 서비스 계정 이메일을 추가하여 '편집자' 권한을 줍니다.
어떤 스프레드 시트든 공유 버튼 누르고 이 생성한 편집자 메일주소를 추가하면 편집 권한 생김.
cat << 'EOF' > ~/news_to_gsheet.py
import requests
import xml.etree.ElementTree as ET
import time
import gspread
from google.oauth2.service_account import Credentials
# 1. 설정
SHEET_URL = "수정할 스프레드시트 링크/edit"
JSON_KEY_PATH = "구글시트 api 설정하고 받은 파일.json"
# SCMP 뉴스 소스 설정 (접두어 SCMP_ 를 붙여서 관리)
SCMP_FEEDS = {
"World": "https://www.scmp.com/rss/5/feed",
"Hong Kong": "https://www.scmp.com/rss/2/feed",
"China": "https://www.scmp.com/rss/4/feed",
"Asia": "https://www.scmp.com/rss/3/feed",
"Property": "https://www.scmp.com/rss/96/feed"
}
def update_news_sheets():
try:
scopes = ["https://www.googleapis.com/auth/spreadsheets"]
creds = Credentials.from_service_account_file(JSON_KEY_PATH, scopes=scopes)
client = gspread.authorize(creds)
sh = client.open_by_url(SHEET_URL)
headers = {'User-Agent': 'Mozilla/5.0'}
for category, url in SCMP_FEEDS.items():
# 요청하신 대로 시트 이름에 SCMP_ 접두어 추가
sheet_name = f"SCMP_{category}"
print(f"📡 {sheet_name} 업데이트 중...")
try:
ws = sh.worksheet(sheet_name)
except gspread.exceptions.WorksheetNotFound:
# 시트가 없으면 새로 생성 (게시일시, 뉴스제목, 링크 순서)
ws = sh.add_worksheet(title=sheet_name, rows="1000", cols="5")
ws.append_row(["게시일시", "뉴스제목", "링크"])
res = requests.get(url, headers=headers, timeout=10)
root = ET.fromstring(res.content)
items = root.findall('.//item')
# 최신 뉴스 확인 (2행 2열: 뉴스제목)
current_top_title = ws.cell(2, 2).value if ws.row_count > 1 else ""
new_data = []
for item in items:
title = item.find('title').text
pub_date = item.find('pubDate').text[5:25]
link = item.find('link').text
# 중복 확인
if title == current_top_title:
break
# 요청하신 순서: 게시일시, 뉴스제목, 링크
new_data.append([pub_date, title, link])
if new_data:
# 2행부터 최신 뉴스를 삽입 (내림차순 유지)
ws.insert_rows(new_data, row=2)
print(f" ✅ {len(new_data)}건 추가 완료!")
else:
print(" 🕒 새로운 뉴스가 없습니다.")
time.sleep(1)
print("\n🚀 모든 SCMP 뉴스 시트 업데이트 완료!")
except Exception as e:
print(f" ❌ 에러 발생: {e}")
if __name__ == "__main__":
update_news_sheets()
EOF
python3 ~/news_to_gsheet.py'IT 전자기기' 카테고리의 다른 글
| 구형폰에 AI 설치하기 (0) | 2026.02.07 |
|---|---|
| 사우스차이나모닝포스트 SCMP RSS (0) | 2026.02.05 |
| futu api 설치 및 termux 설정 (0) | 2026.02.05 |
| 갤럭시 폴드 1 F907N LGU 루팅 (0) | 2026.02.01 |
| termux 접속시 tmux 선택 옵션 (0) | 2026.01.31 |
댓글