구글 캘린더를 이용하여 SMS 알림이 사용하기 좀 도와주세요~ (python 또는 perl)

pogusm의 이미지

구글 캘린더는 스캐쥴을 관리하며, 지정한 시간이 되었을때 사용자에게 popup, email, sms 등의 방법으로 알람을 해줍니다.

이런 특성과 구글 캘린더 API를 이용하여, 파이썬 또는 펄로 무료 SMS 알림이를 구현할 수 있나 봅니다.

아마도.. 구글 캘린더의 편법이용, 남용 일 수도 있겠네요.

아래의 샘플 코드는 http://www.randomshouting.com/2011/02/06/Free-SMS-notifications-from-Google.html 에서 얻은 파이썬 소스코드 입니다.

import atom
import gdata.calendar
import gdata.calendar.service
import time
 
TIME_FORMAT = '%Y-%m-%dT%H:%M:%S.000Z'
CALENDAR_URL = 'http://www.google.com/calendar/feeds/default/private/full'
 
class GoogleSms:
    def __init__(self, username, password):
        self.username = username
        self.password = password
 
        service = gdata.calendar.service.CalendarService()
        service.email = username
        service.password = password
        service.source = 'GoogleSms'
        service.ProgrammaticLogin()
 
        self.calendar_service = service
 
    def send(self, message):
        event_time = time.strftime(TIME_FORMAT, time.gmtime(time.time()+60))
 
        event = gdata.calendar.CalendarEventEntry()
        event.title = atom.Title(text=message)
        event.content = atom.Content(text=message)
 
        reminder = gdata.calendar.Reminder(minutes=1)
        reminder.method = 'sms'
 
        when = gdata.calendar.When(event_time)
        when.reminder.append(reminder)
 
        event.when.append(when)
 
        try:
            # Add the entry to calendar
            cal_event = self.calendar_service.InsertEvent(event, CALENDAR_URL)
        except gdata.service.RequestError, request_exception:
            raise
 
if __name__ == '__main__':
    sms = GoogleSms('account@gmail.com', 'yourpassword')
    sms.send('Alert!')

구글캘린더에서 SMS 수신이 가능하게끔 세팅을 마친후
위의 소스코드에서 구글 계정과 패스워드 를 입력하여 테스트를 해보았습니다.

하지만, 해당 일정이 정상적으로 구글캘린더에 삽입이 되고, SMS알람도 정상적으로 등록이 되기는 하는데
실제로 SMS이 오지는 않습니다
(물론 구글캘린더에서 직접 일정을 입력하고 SMS알람을 설정하면 정상적으로 수신됩니다)

무엇이 문제일까요?
구글이 위와 같은 남용을 막기위해 조치를 취해서 안되는걸까요?
아니면 소스코드에 문제가 있는걸까요?

참고로 펄로 작성된 소스코드는 http://advent.perl.kr/2010/2010-12-02.html 이곳에 있습니다.
하지만 이 역시 일정이 등록이 되는데,
$entry->reminder('sms', 'minutes', 1); 라는 부분 자체가 작동하지 않는듯 합니다. (SMS알람이 등록조차 되지 않음)

혹시 아시는 분 있으시면 조언좀 부탁드립니다~

익명 사용자의 이미지

저도 함 해봤는데... 한번에 잘 되지는 않더군요.
수시간 후에 다시 해보니 문자가 오더군요.

익명 사용자의 이미지

일정과 SMS알람을 등록하는 코드입니다.
원래 perl 코드를 보면 private 주소를 입력하고 어쩌구저쩌구 되어 있던데..
아래처럼 간단하게 해도 작동하더군요.
첫 시도부터 (달력에는 SMS 알람 등록되어 있음을 확인) SMS는 오지 않았지만, 수시간 후에 다시 해보니 SMS가 잘 오더군요.

# coding: utf-8
# gem install googlecalendar # 설치해야 한다.
require 'googlecalendar'
require 'time'
 
def send_sms title
    g = Googlecalendar::GData.new
    g.login('귀하의 이메일 주소', '이메일 패스워드')
    event = {
        :title     => title, # 이 부분은 문자 메시지에 표시된다.
        :content   => "SMS 테스트", # 이 부분은 문자 메시지에 나오지 않는다.
        :author    => '귀하 이름',
        :email     => '귀하의 이메일 주소',
        #:where     => '대한민국', # 이 부분은 없어도 됨.
        :startTime => (Time.now + 60 * 2).iso8601, # 현재 시간 + 2분
        :endTime   => (Time.now + 60 * 3).iso8601  # 현재 시간 + 3분
    }
    g.add_reminder(event, '1', 'sms') # 1분전에 문자 메시지 알림.
    g.new_event(event)
end
 
send_sms '문자 메시지가 정말 오네.'
pogusm의 이미지

처음엔 안되고 수시간후에 되나요????? (조금 이상하네요..)

혹시, 처음에는 API를 이용해서 해당 소스코드로 일정을 추가한후 -> 웹사이트에서 시간을 수정하거나 한건 아닌가요? (이럴경우는 SMS가 오긴 오던데..)

저는 무슨짓을 해봐도... API를 이용한 일정을 입력할경우엔... SMS는 죽어도 안되더라구요... ㅠㅠ
(API를 이용해서 SMS와 popup을 동시에 입력할경우 popup만 작동)

ainvyu의 이미지

음 확인해보니 다소 문제가 있네요. 예전에 따놓은 private 주소로 하면 잘되는데 최근 갱신한 private 주소로 하면 안되는 현상이 있음을 확인했습니다. 문제가 뭔지 알아보도록 하겠습니다. ;)

치즈~ ;)

pogusm의 이미지

그렇죠? 잘 안되는 문제가 발생하죠?
혹시 문제를 알게 되시면 꼭좀 알려주세요~~
감사합니다.

ps. http://stackoverflow.com/questions/6756940/not-able-to-get-sms-alert-when-a-calendar-entry-is-added-through-code 의 질문을 보니, 이미 몇달전부터 같은 문제가 있어보입니다.
아마 구글에서 SMS 남용을 막은거 같네요 ㅠㅠ

익명 사용자의 이미지

구글 Open API로 제가 만든 구글캘린더, 구글주소록 프로그램도 한번 써보세요.
SKT, KT, 천리안 무료문자를 이용해 일정말고도 문자전송할 수도 있지요.

http://capofcom.tistory.com/

구글 Open API는 일정 데이터를 핸들링하는 기술을 제공하기때문에
데이터베이스처럼 코딩능력만 있으면 자신이 좋아하는 방식으로 단장할 수 있는데
제가 만든 이프로그램에서 제일 자부심(?)을 갖는건
이벤트 시간설정할 때 24시간 시계를 마우스로 드래그앤드랍으로 쉽게 한점이지요. ^^

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.