IT 이야기/Python

[Python] 티스토리 블로그, 구글 검색 반영(색인) 자동화 시스템을 개발해보자 1

출가외인 2024. 6. 25. 16:36
반응형

 
 
 

목차

 

 
 
 

들어가며

프로젝트 이름 : Index_Google
사용 프로그램 : 파이썬 Python
코딩 방법 : ChatGPT
최종 프로그램 돌릴 하드웨어 : 시놀로지 도커 Synology Docker
 
티스토리 방문자를 늘리는 노력을 할 때, 가장 먼저 하게 되는 일은 구글과 네이버에 검색이 되도록 색인 Index 를 하는 일이다.
 
간편하게 할 수 있다면 전혀 문제가 없겠지만... 꽤나 시간이 오래 걸리고 재미없는 일이다. 어찌해볼까 고민하다가 많은 사람들이 구글 웹마스터도구 API를 이용해서 색인 자동화를 구축하고 있다는 것을 알게 되었고,  ChatGPT의 도움을 받아서 Docker 환경에서 자동으로 돌아가는 색임 시스템을 개발하기로 마음을 먹었다.
 
 
 

티스토리 발행글 URL 수집

인덱싱(색인)을 할 때, 가장 먼저 처리되어야 할 것은 블로그에 발행된 글들의 URL 을 수집하는 것.
아래 코드를 보면 사전에 입력을 해둔 {tistory_blog_address} 에 sitemap.xml 을 붙여 사이트맵 URL을 만들고 사이트맵 안에서 발행된 글의 주소를 가져오는 방식이다.
 
 

def get_tistory_post_lists_indexing_google():
    for tistory_blog_address in tistory_address_lists:
        modified_address = tistory_blog_address.replace('https://', '').replace('http://', '').replace('.', '_')
        csv_save_path = f'{csv_submit_urls_path}google_{modified_address}_submit_urls.csv'
        submit_urls = []
        tistory_sitemap_address = f'{tistory_blog_address}/sitemap.xml'

        res = requests.get(tistory_sitemap_address, headers={'User-Agent': user_agent})
        pattern = f'(?<={tistory_blog_address}/)[^\\s]*(?=</loc>)'
        url_info_lists = re.findall(pattern, res.text)

        for url_info in url_info_lists:
            if url_info.isdigit() or url_info.find('entry/') == 0:
                url = f'{tistory_blog_address}/{url_info}'
                submit_urls.append({'url': url, 'indexed': 'X'})

        df = pd.DataFrame(submit_urls)
        df.drop_duplicates(subset=['url'], keep='first', inplace=True)

        if not os.path.exists(csv_save_path):
            df.to_csv(csv_save_path, mode='w', encoding='utf-8-sig', index=False)
        else:
            df.to_csv(csv_save_path, mode='a', encoding='utf-8-sig', index=False, header=False)
            df = pd.read_csv(csv_save_path).drop_duplicates(subset=['url'], keep='first')
            df.to_csv(csv_save_path, index=False, encoding='utf-8-sig')

        print(f'{C_BOLD}{C_YELLOW}{C_BGBLACK}{csv_save_path}에 {len(submit_urls)}개의 URL 저장 완료{C_END}')
        indexing_google(tistory_blog_address, csv_save_path)

 

마지막에 indexing_google 이라는 함수를 불러온다.

이 함수는 아래에 작성

 
 

수집된 URL로 인덱싱

아래는 인덱싱 하는 코드의 일부분인데,
구글 API 를 가지고 와서 URL을 색인 요청하고, 되돌아오는 'status' 값에 따라 색인 요청이 성공되었는지, 실패되었는지를 확인하는 코드다.
 
 

url = df["url"].values[index_count]
json_key_file = google_api_json_key_dictionary[blog_address]
scopes = ["https://www.googleapis.com/auth/indexing"]
endpoint = "https://indexing.googleapis.com/v3/urlNotifications:publish"

credentials = ServiceAccountCredentials.from_json_keyfile_name(json_key_file, scopes=scopes)
http = credentials.authorize(httplib2.Http())

content = {'url': url, 'type': "URL_UPDATED"}
response, content = http.request(endpoint, method="POST", body=json.dumps(content))
result = json.loads(content.decode())

if response['status'] == '200':
	print(f'>> NOTICE: 색인 요청 성공!!')
    df.at[index_count, 'indexed'] = 'O'
    count += 1
elif response["status"] == '429':
    print(f'{C_BOLD}{C_YELLOW}{C_BGBLACK}>> NOTICE: GOOGLE 최대 인덱싱 수(200개)를 넘었습니다. 루프를 종료합니다.{C_END}')
    eturn -1
else:
	print(f'{C_BOLD}{C_YELLOW}{C_BGBLACK}NOTICE: 색인 요청 실패!! [{response["status"]}] {C_END}')
	df.at[index_count, 'indexed'] = 'X'
	count += 1

if count != available_indexing_list_num:
	sleep(INDEXING_WAIT_TIME)

 
 
 
 
위 코드를 사용해서 다음 글에서는 실제 python 파일을 만드는 것까지 진행해보려고 한다.

 

 

[Python] 티스토리 블로그, 구글 검색 반영(색인) 자동화 시스템을 개발해보자 2

 

집나가면 개고생

최신 IT 기기와 소프트웨어 리뷰, 카메라 장비 분석, 내돈내산 솔직 리뷰, 그리고 다양한 맛집 탐방기를 제공하는 블로그입니다. 전문가의 시선으로 상세하고 객관적인 정보를 전달합니다.

story-way.tistory.com

 

반응형