Monthly Archives: 2월 2010

Excel 과 Twitter 매쉬업 – 엑셀로 100명이상에게 트위터 DM 동시에 보내기

트위터를 사용하다보면 동시에 여러명에게 DM을 보내야할 일이 가끔 생깁니다. 모임을 진행한다던지, 몇몇 지인들에게만 중요정보를 알린다던지 할때 말이죠. 공개트윗으로 날리긴 곤란하고, DM 으로 각각보내자니 힘들고.. 그래서 예전에 TweetGuru 의 MultiDM 이라는 서비스를 만들었는데요. 서버의 제약 문제 때문에 동시에 12명까지밖에 보낼수가 없게 되어있습니다. 그리고 계정정보들을 따로 저장해놨다가 하는등의 작업들이 필요했는데요. 많이들 쓰시는 Microsoft Excel 을 이용해서 DM 을 여러명에게 편하게 보낼수 있는 매쉬업을 공개합니다.

Excel 과 Twitter 매쉬업하기



지난번 파워포인트와 트위터 매쉬업하기 에서 사용했던 소스를 거의 그대로 활용합니다. VBA 코드로 되어있습니다. 아래와 같은 화면입니다.

Excel to Twitter Mashup

너무 간단해서 보시면 사용법은 다 아실듯 합니다. ID 칸에 보낼사람 트윗ID를 @ 없이 적고, 메시지를 적으면 됩니다. 메시지가 빈칸이면 위칸것을 재활용합니다. 캡쳐에 있는 대로라면 @clien_net 과 @tweet_id8 까지는 “즐거운 설날되세요!” 를 받고, 나머지 @tweet_id9-16 은 “즐거운 설날되세요! 새해 복많이 받으세요!” 를 받게 됩니다. 버튼을 누르면 작은창이 떠서 트위터 ID 와 암호를 물어봅니다.

주의하실 점은 화면에 있는 대로 트위터 자체의 제한인 일일 DM 250 개 제한과 시간당 API 150번 호출제한을 염두에 두세요.
이 파일로 150명에게 DM 보내고 나면 트위터 클라이언트가 바로 리밋걸리게 됩니다. 한시간동안 웹으로 밖에 못쓰시게 되는거죠.

그리고 정말 중요! 트위터의 정책상 같은 DM 을 반복해서 보내면 스팸으로 인식되어 계정사용에 문제가 생길수도 있습니다. 조심해서 사용하세요.
혹시 이 파일로 인해 생기는 문제는 제가 책임지지 않습니다.

아래는 이 엑셀+트위터 매쉬업의 코드입니다.

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Function DM(touser, tweetmsg, uid, pwd)
     Dim objHTTP As Object
     Set objHTTP = CreateObject("Microsoft.XMLHTTP")
          objHTTP.Open "POST", "http://twitter.com/direct_messages/new.xml", False, uid, pwd
          objHTTP.send "user=" & touser & "&text=" & tweetmsg

          DM = objHTTP.responseText
     Set objHTTP = Nothing
End Function

Function getStringBetween(str, sstart, send)
    PosStart = InStr(str, sstart)
    PosEnd = InStr(str, send)

    If (PosStart > 0) And (PosEnd > 0) Then
        getStringBetween = Mid(str, PosStart + Len(sstart), PosEnd - PosStart - Len(sstart))
    Else
        getStringBetween = ""
    End If

End Function

Function Send_DM()
    Load frmLogin
    frmLogin.Show

    strUID = frmLogin.txtUID
    strPWD = frmLogin.txtPWD

    Unload frmLogin

    If Len(strUID) = 0 Or Len(strPWD) = 0 Then Exit Function

    ' Twitter Limits 250 DM per day. You can't exceed this
    Application.Cursor = xlWait

    For i = 2 To 151
        TweetID = Cells(i, 1)
        If Len(Cells(i, 2)) > 0 Then
            tweetmsg = Cells(i, 2)
        End If

        If Len(TweetID) > 0 Then
            res = DM(TweetID, tweetmsg, strUID, strPWD)
            Cells(i, 5) = res
            If (Len(getStringBetween(res, "id", "/id")) > 0) Then
                Cells(i, 3) = "성공"
            Else
                Cells(i, 3) = "실패"
            End If
        Else
            Exit For
        End If

        ' 혹시 몰라서 한건의 DM당 1초씩 딜레이를 뒀습니다. 트위터 서버측에 부하를 줄이기 위함입니다.
        ' 시간이 문제가 안되시는분은 5000 정도로 해서 5초 딜레이를 주시면 전혀 무리없을듯 합니다.
        Sleep 1000
    Next i

    Application.Cursor = xlDefault
End Function

가지고 계신 트위터 사용자들 주소록이 있다면, 간단히 ID 부분에만 복사하셔서 쉽게 메시지 보내시면 됩니다.
주의! 다운 받아서 오픈한후 보안경고 창에서 매크로 사용토록 확인해주셔야 기능이 동작됩니다.

▶ 엑셀파일 다운로드 : Excel + Twitter Multi DM 엑셀 다운받기 – 제 Dropbox 입니다.

( 혹시 Dropbox 사용 안해보신분들은 꼭 만들어 두세요 윈도우/맥/아이폰 모두 연동되는 쓰기편한 웹하드로 2 Giga 까지 무료입니다. )

어떻게 사용하시느냐에 따라 좋은 전달도구가 될수도, 나쁜 광고용 도구로 전락될수도 있습니다.
국내 트위터 사용자분들을 믿습니다. 이걸 광고 및 나쁜용도로 사용하지 말아주세요.

엉뚱한 개발자 구루였습니다.