※ 이 글은 제목에 표시한 것처럼 프로그래밍 언어인 파이썬을 활용하여 애드센스 수익 알림 기능을 구현하는 내용으로, 파이썬을 사용해본 적이 없는 블로거가 사용하기에는 다소 복잡할 수 있음
주제 소개
초보 블로거인 필자가 이 블로그를 운영한 지도 벌써 약 한 달 반이 되었다.
구글 애드센스 광고 게시를 승인받은 지도 한 달 정도 된 것 같은데, 처음에 비하면 방문자 수도 많이 늘고, 아직 수익 실현의 기준인 100달러에는 못 미치지만 종종 광고를 클릭해 주는 분들이 있어 애드센스 계정에 조금씩 쌓여가는 것에 즐거워하고 있다.
필자는 페이스북, 인스타그램 등 SNS를 일절 하지 않고 있는데, 그 이유는 SNS를 하면 수시로 계정에 들어가 다른 사람들의 소식이나 댓글을 확인하느라 시간을 너무 빼앗기기 때문이다.
그런데 블로그를 개설하고 애드센스 광고를 게시해 놓고 나니, SNS 댓글 확인하는 것과 마찬가지로 수시로 블로그 관리자 페이지와 구글 애드센스 페이지에 접속해 방문자 수와 그날의 광고 수익을 확인하게 된다.
그 횟수도 문제이지만, 블로그 관리자 페이지나 애드센스 페이지 모두 페이지가 로드되는 것이 빠르지 않아 매번 확인할 때마다 페이지 로드를 기다리는 데에 시간이 많이 소모된다.
그래서 나름대로 그 시간을 아껴보기 위해서 애드센스 수익이 났는지 주기적으로 체크하고, 수익이 난 경우에 알림을 보내주는 프로그램을 만들어 보았다.
애드센스 수익 알림 프로그램 만들기
필자는 앞서 이 블로그에 스마트폰 애플리케이션인 termux를 이용해서 스마트폰에서 파이썬을 사용하는 방법, termux를 이용해 알림을 보내거나 문자를 보내는 등 스마트폰을 컨트롤하는 방법, 그리고 구글 API를 이용하는 방법을 소개했었다.
여기에서 소개하는 방법은 위에서 소개한 것들에서 특별히 더 새로운 것은 없고, 위 내용들을 활용해서 실제 스마트폰에서 상시 실행해 둘 수 있는 프로그램을 작성한 것이다.
먼저 첫 번째, 두 번째 링크에 소개한 내용을 참고하여 termux를 설치하고 termux에서 파이썬을 설치하자.
그런 다음에는 세 번째 링크에 소개한 내용을 참고하여 termux api를 설치하고, 시험 삼아 알림을 보내는 파이썬 스크립트를 작성해 보자. os 라이브러리를 이용하여 파이썬 스크립트를 실행해 termux api를 실행하는 방법도 소개되어 있다.
그런 다음에는 제일 마지막 링크에 소개된 내용을 참고하여 구글 애드센스 API의 예제를 다운받아 실행하는 데까지 따라해 보자.
여기까지 따라 왔다면, 이제 위에서 받은 구글 애드센스 API 예제 가운데 generate_report.py 파일을 약간만 수정하면 우리가 원하는 프로그램을 만들 수 있다.
generate_report.py의 원래 스크립트는 아래 링크를 따라 가면 볼 수 있다.
원본 소스에서 우리가 수정할 부분은 52번째 줄 이하이다.
API 호출 관련 코드 수정
위 스크립트의 내용을 살펴보면, 52~61번째 줄에서는 api를 호출한 결과를 result 변수에다 저장하는 부분이다.
54번째 줄에서부터 61번째 줄에는 api를 호출할 때 넘겨주는 항목들이 보이는데, 55~56번째 줄은 애드센스 보고서를 불러올 기간, 57~59번째 줄은 불러올 항목에 해당한다.
55~59번째 줄을 우리는 아래와 같이 고칠 것이다.
import datetime # 프로그램 실행 일의 정보를 불러오기 위해 datetime 라이브러리를 임포트
today = datetime.datetime.today() # today 변수에다 오늘 날짜를 저장
# (중략)
startDate_year=today.year, startDate_month=today.month, startDate_day=today.day,
endDate_year=today.year, endDate_month=today.month, endDate_day=today.day,
# 시작일과 종료일을 today 변수의 year, month, day로 설정
metrics=['PAGE_VIEWS', 'CLICKS', 'ESTIMATED_EARNINGS'],
# 관심 있는 항목을 제외한 나머지 항목들 삭제
출력 형태 변경
코드를 위와 같이 고치고 나서 스크립트를 실행하면, 실행일 기준의 페이지 조회수, 광고 클릭수와 해당일의 광고 수익에 관한 api 호출 결과가 result 변수로 저장되고, 63번째 줄 이하의 코드에 따라 출력이 된다.
그런데 출력 결과가 보기에 그리 예쁘지 않으므로 아래와 같이 코드를 수정하자.
t = datetime.datetime.now() # 현재 시각을 t 변수로 저장
print("EARNING : ", result["totals"]["cells"][4]["value"])
print("VIEWS(CLICKS) : ", result["totals"]["cells"][2]["value"], "(", result["totals"]["cells"][3]["value"], ")")
print(f"TIME: (t.hour) : (t.minute)") # 현재 시각을 00:00 형태로 출력
print("------------------------------") # 가독성을 위해 구분선 출력
그러면 출력 형태가 아래처럼 보기 좋게 바뀐다.
EARNING : 0.00
VIEWS(CLICKS) : 0 ( 0 )
TIME : 00:00
API 호출 반복 및 수익 발생 알림
이제 위와 같이 API를 호출하고 결과를 출력하는 것을 일정 시간마다 반복하고, 수익이 발생한 것을 알려주도록 코드를 수정해보자.
예제의 원본 소스를 보면 40~84번째 줄에 걸쳐서 아래와 같이 api를 호출하고 그 결과를 출력하는 main 함수를 정의하고 있다.
def main(argv):
...
with discovery.build('adsense', 'v2', credentials = credentials) as service:
try:
...
except google.auth.exceptions.RefreshError:
...
현재는 위 코드가 실행되면 결과가 출력되기만 하는데, 실행시마다 수익이 발생했는지를 체크할 필요가 있으므로 아래와 같이 except 구문이 끝나는 84번째 줄 밑에다 return 구문을 추가하여 main 함수가 실행되고 나면 'ESTIMATED_EARNINGS' 수치를 돌려주도록 변경하자.
return result["totals"]["cells"]["4"]["value"]
이제 원본 스크립트의 맨 아래 2줄을 보자. 원본에서는 아래처럼 main 함수를 실행하기만 하고 있다.
if __name__ == '__main__':
main(sys.argv)
[참고] if __name__ == '__main__'이 무엇인지 궁금하다면 아래 글을 참조 if __name__ == "__main__"은 왜 쓰는 걸까? |
이 부분을 아래와 같이 고쳐준다. 코드에 대한 설명은 주석으로 대체한다.
from time import sleep # 대기 시간을 설정하기 위해 sleep 모듈을 임포트
# (중략)
if __name__ '__main__':
result_before = O # 알림 전송 여부를 판단하기 위해 수익의 초기값을 0으로 설정
while True: # 무한 반복하기 위해 while문 사용
result_after = main(sys.argv) # main 함수 실행 결과 반환되는 광고수익을 result_after 변수로 저장
if result_before != result_after: # API 호출 결과 불러온 값이 초기값과 다를 경우
os.system(f"termux-notification -c {result_after}") # result_after 값을 알림으로 표시
result_before = result_after # 수익의 초기값을 이번에 불러온 값으로 업데이트
sleep(900) # 15분간 대기
이제 수정된 스크립트를 실행하면 매 15분마다 API를 호출하여 광고수익 값이 변화된 경우 알림을 보내줄 것이다.
화면이 꺼져 있을 때도 계속 작동하게 하는 방법
마지막으로 한 가지만 덧붙이자면, 아마 스크립트를 실행하고 화면을 계속 켜 놓지 않으면 정확히 15분마다 API가 호출되지 않을 것이다.
이것은 스마트폰의 배터리 관리 최적화 기능 때문으로 보인다. 화면이 꺼져 있으면 전력을 최대한 적게 소모하도록 하면서 termux에서 실행 중인 프로세스도 멈추는 것 같다.
termux에는 화면이 꺼져 있어도 프로세스가 계속 작동하도록 해주는 기능을 제공한다.
termux가 실행 중인 상태에서는 알림 창에 아래처럼 termux 세션이 실행 중이라고 표시되는데, 창을 확대해 보면 세션을 종료할 수 있는 exit 버튼 옆에 "aquire wakelock" 버튼이 있다.
이것을 클릭하면 아래처럼 wakelock이 실행되었다는 표시로 바뀌는데, 이 상태에서는 화면을 꺼 놓더라도 termux에서 실행 중인 프로세스가 중단 없이 계속 실행된다.
'코딩 > Python' 카테고리의 다른 글
ipython shell(터미널, 쉘)에서 작성한 코드를 파이썬 스크립트로 바꾸기/ipython 매직커맨드 (0) | 2022.01.29 |
---|---|
쉘(터미널, 커맨드라인)에서 파이썬 코드 자동 완성(추천)하는 방법/IPython (0) | 2022.01.18 |
파이썬으로 구글 API 활용하기 예제/애드센스(Adsense) 보고서 데이터 불러오기 (7) | 2022.01.01 |
파이썬으로 공공데이터포털(data.go.kr) 오픈 API 활용하기 예제/국세청 사업자등록 상태 조회 (1) | 2021.12.29 |
for 반복문을 이용해 전역 변수(global variable) 여러 개를 한번에 선언하는 방법 (0) | 2021.12.27 |
댓글