본문 바로가기
IT 전자기기

파이썬에서 스프레드시트에 자료 넣기 temux 이용

by 다사도 2026. 2. 5.
반응형

구글 클라우드 콘솔에서 프로젝트를 만들고 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

댓글