쓰레드 자동화 프로젝트구현하기

쓰레드 자동화 프로젝트구현하기

우리는 투더스레드의 기능과 유사한 쓰레드자동포스팅 프로젝트를 진행합니다. Threads APIAI 콘텐츠 생성(제미나이 API 등)을 활용해 비슷한 자동화 프로그램을 Python으로 구현하는 프로젝트를 진행하는거조!!. 이 프로젝트는 설치, 설정, 실행 단계를 포함하며, 뉴스픽 파트너스 대신 일반 URL 링크를 삽입해 유연성을 높입니다. 또한, 사용자의 요청(한글 응답, SEO 경험, 자동화 도구 관심)을 반영해 초보자 친화적이고 실용적인 코드를 작성합니다.

프로젝트 개요

  • 목표: 쓰레드에서 AI가 생성한 콘텐츠(텍스트, 링크)를 자동으로 게시하고, 좋아요/팔로우/댓글을 자동화하는 프로그램.
  • 기술 스택:
    • Python: 핵심 로직 구현.
    • Threads API: 포스팅 및 상호작용 자동화.
    • Google Gemini API: 콘텐츠 생성.
    • Selenium: 쿠키 추출 및 초기 설정.
  • 기능:
    • 쓰레드 계정 설정(닉네임, 쿠키).
    • AI로 콘텐츠 생성(유머, 뉴스 등) 및 링크 삽입.
    • 자동 포스팅(하루 3개 제한), 좋아요, 팔로우, 댓글.
    • 랜덤 간격(7~15분) 실행.
  • 참고:
    • 투더스레드 설정(쿠키 추출, API 키, 답변 스타일).
    • 웹 검색 결과(Threads API, 자동화 툴).
    • 사용자 대화(2025/4/19: SEO, 2025/5/2: 자동화 도구).

구현 코드

아래는 ThreadsAutoPoster라는 이름의 Python 프로그램으로, 투더스레드의 기능을 모방해 구현한 코드입니다. 코드에는 설정 파일 관리, 쿠키 추출, AI 콘텐츠 생성, Threads API를 통한 포스팅이 포함됩니다. 주석으로 각 단계를 명확히 설명했습니다.

ThreadsAutoPoster.py

import json import time import random import requests import google.generativeai as genai from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager from http import HTTPStatus # 설정 파일 로드/저장 함수 def load_config(): try: with open("config.json", "r") as f: return json.load(f) except FileNotFoundError: return { "threads_nickname": "", "threads_cookie_file": "", "gemini_api_key": "", "link_url": "", "role": "20대 남자", "tone": "긍정적, 공감, 반말, 짧게" } def save_config(config): with open("config.json", "w") as f: json.dump(config, f, indent=4) # 쿠키 추출 함수 (Selenium) def extract_cookies(url, output_file): driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) driver.get(url) input("로그인 후 Enter를 누르세요...") cookies = driver.get_cookies() with open(output_file, "w") as f: json.dump(cookies, f, indent=4) driver.quit() print(f"쿠키가 {output_file}에 저장되었습니다.") # Gemini AI로 콘텐츠 생성 def generate_content(api_key, role, tone, topic="유머"): genai.configure(api_key=api_key) model = genai.GenerativeModel("gemini-1.5-flash") prompt = f"{role}로서 {tone} 말투로 쓰레드에 올릴 {topic} 관련 500자 이내 게시물 작성. 링크 삽입 가능." response = model.generate_content(prompt) return response.text # Threads API로 포스팅 def post_to_threads(cookies, content, link_url, access_token): headers = { "Authorization": f"Bearer {access_token}", "Cookie": "; ".join([f"{c['name']}={c['value']}" for c in cookies]) } # 미디어 컨테이너 생성 media_url = f"https://graph.threads.net/v1.0/<THREADS_USER_ID>/threads" payload = { "text": f"{content}\n{link_url}", "is_public": True } response = requests.post(media_url, headers=headers, json=payload) if response.status_code == HTTPStatus.OK: creation_id = response.json().get("id") # 게시물 퍼블리시 publish_url = f"https://graph.threads.net/v1.0/<THREADS_USER_ID>/threads_publish?creation_id={creation_id}" publish_response = requests.post(publish_url, headers=headers) if publish_response.status_code == HTTPStatus.OK: print("포스팅 성공!") return True print(f"포스팅 실패: {response.text}") return False # 좋아요/팔로우/댓글 자동화 (예시) def interact_with_threads(cookies, access_token, target_post_id): headers = { "Authorization": f"Bearer {access_token}", "Cookie": "; ".join([f"{c['name']}={c['value']}" for c in cookies]) } # 좋아요 like_url = f"https://graph.threads.net/v1.0/{target_post_id}/likes" requests.post(like_url, headers=headers) # 팔로우 (가정) follow_url = f"https://graph.threads.net/v1.0/<TARGET_USER_ID>/follow" requests.post(follow_url, headers=headers) # 댓글 comment_url = f"https://graph.threads.net/v1.0/{target_post_id}/replies" comment = generate_content(config["gemini_api_key"], config["role"], config["tone"], "댓글") payload = {"text": comment} requests.post(comment_url, headers=headers, json=payload) print("좋아요, 팔로우, 댓글 완료!") # 메인 실행 함수 def main(): config = load_config() # 초기 설정 if not config["threads_nickname"]: config["threads_nickname"] = input("쓰레드 닉네임을 입력하세요: ") config["threads_cookie_file"] = "threads_cookies.json" extract_cookies("https://www.threads.net", config["threads_cookie_file"]) config["gemini_api_key"] = input("Gemini API 키를 입력하세요: ") config["link_url"] = input("삽입할 링크 URL을 입력하세요: ") save_config(config) # 쿠키 로드 with open(config["threads_cookie_file"], "r") as f: cookies = json.load(f) # Threads API 액세스 토큰 (예시, 실제로는 OAuth로 획득) access_token = "<YOUR_THREADS_ACCESS_TOKEN>" # 하루 3개 포스팅 제한 for _ in range(3): # AI 콘텐츠 생성 content = generate_content(config["gemini_api_key"], config["role"], config["tone"]) # 포스팅 post_to_threads(cookies, content, config["link_url"], access_token) # 상호작용 (가정된 게시물 ID) interact_with_threads(cookies, access_token, "<TARGET_POST_ID>") # 랜덤 대기 (7~15분) wait_time = random.randint(7 * 60, 15 * 60) print(f"{wait_time // 60}분 대기 중...") time.sleep(wait_time) if __name__ == "__main__": main()

코드 설명

  1. 설정 관리:
    • config.json에 닉네임, 쿠키 파일 경로, Gemini API 키, 링크 URL, 역할, 말투 저장.
    • 초기에 설정이 없으면 사용자 입력으로 설정값 저장.
  2. 쿠키 추출:
    • Selenium으로 쓰레드 로그인 후 쿠키를 JSON 파일로 저장.
    • 투더스레드의 “투더 쿠키” 확장 프로그램 대신 Selenium 사용(오픈소스, 무료).
  3. AI 콘텐츠 생성:
    • Google Gemini API로 500자 이내의 유머/뉴스 콘텐츠 생성.
    • 역할(예: 20대 남자)과 말투(긍정적, 반말) 반영.
  4. Threads API 포스팅:
    • Threads API(graph.threads.net)로 텍스트와 링크 게시.
    • 미디어 컨테이너 생성 후 퍼블리시(참고:).
    • 실제 구현 시 <THREADS_USER_ID>와 <ACCESS_TOKEN>은 Meta 개발자 포털에서 획득.
  5. 상호작용:
    • 좋아요, 팔로우, 댓글을 API로 처리(예시 ID 사용).
    • 댓글도 Gemini API로 자연스럽게 생성.
  6. 자동화 주기:
    • 하루 3개 포스팅 제한(투더스레드 참고).
    • 7~15분 랜덤 간격으로 실행해 자연스러움 유지.

시작 방법

  1. 환경 설정:
    bash복사
    pip install requests google-generativeai selenium webdriver-manager
  2. Threads API 설정:
    • Meta 개발자 포털에서 앱 생성, Threads API 권한 부여.
    • OAuth로 access_token 획득(참고:).
  3. Gemini API 키:
    • Google AI Studio에서 키 발급.
  4. 실행:
    bash복사
    python ThreadsAutoPoster.py
    • 첫 실행 시 닉네임, 쿠키, API 키, 링크 URL 입력.
    • 이후 자동으로 포스팅 및 상호작용 수행.

한계 및 개선점

  • Threads API 제한:
    • 실제 access_token과 user_id는 Meta 개발자 계정 필요.
    • API 호출 한도 고려(하루 3개로 제한해 안전성 확보).
  • 쿠키 관리:
    • 쿠키 만료 시 재로그인 필요(투더스레드의 “세션 갱신” 참고).
    • 향후 자동 갱신 로직 추가 가능.
  • 수익화:
    • 뉴스픽 파트너스 대신 일반 링크 사용. 뉴스픽 API 연동 시 추가 구현 필요.
  • 확장성:
    • 쿠팡 파트너스, 다른 제휴 링크 추가 가능(투더스레드 커뮤니티 참고).
    • 이미지 자동 업로드 기능은 Threads API 문서 확인 후 추가 가능.

사용자 요청 반영

  • 투더스레드 설정 기반:
    • 닉네임, 쿠키, API 키, 답변 스타일 설정 반영.
    • 하루 3개 포스팅, 7~15분 간격 구현.
  • SEO 및 자동화 경험:
    • 코드 주석으로 초보자 이해 돕기(2025/4/19: SEO 가독성).
    • 자동화 툴 최적화(2025/5/2: 도구 선택).
  • 한글 응답:
    • 모든 설명 한글로 제공(2025/4/29: 한글 요청).

다음 단계

  • 테스트:
    • 로컬 환경에서 실행, 포스팅 및 상호작용 확인.
    • 오류 발생 시 디버깅(예: API 토큰 만료).
  • 커뮤니티 피드백:
    • 투더제이 코딩 클래스 네이버 카페 가입, 코드 공유 및 피드백 요청.
  • 수익화 확장:
    • 뉴스픽 파트너스 계정 가입, 클릭당 수익 테스트.
    • 쿠팡 파트너스 등 추가 제휴 링크 통합.
궁금한 점이나 추가 기능(예: 이미지 업로드, 특정 콘텐츠 주제) 요청 있으면 알려주세요! 프로젝트 진행하며 계속 지원하겠습니다.

댓글 쓰기