글쓴이 보관물: xguru

트위터와 파워포인트 매쉬업하기 – Twitter + Powerpoint Mashup

트위터 API를 활용한 국내외 다양한 매쉬업 사례에서 사용한 파워포인트 파일엔 원래 매크로를 이용한 트위터 매쉬업이 들어가 있었습니다만, Slideshare 가 매크로가 포함된 파일을 받아주지 않아서 제거하고 올렸습니다. 이번엔 이 파워포인트 + 트위터 매쉬업에 대해서 소개드리겠습니다.

파워포인트에는 꽤 오래전부터 VBA(VisualBasic for Applications) 방식의 매크로를 사용할수가 있는데요. (VBA 편집기 창 여는 단축키는 Alt + F11 입니다. ) 이걸 이용하면 간단하게 트위터에 글 남기는 함수를 만들수 있습니다. 트윗남기기 소스는 다음과 같습니다.

Function Tweet(tweetmsg, uid, pwd)
     Dim objHTTP As Object
     Set objHTTP = CreateObject("Microsoft.XMLHTTP")
          objHTTP.Open "POST", "http://twitter.com/statuses/update.xml", False, uid, pwd
          objHTTP.send "status=" & tweetmsg
          Tweet = objHTTP.responseText
     Set objHTTP = Nothing
End Function

위와 같이 8줄만 있으면 트위터 서버에 HTTP Basic Authentication 을 이용해 POST 로 간단히 트윗을 남길수 있습니다. 트위터 ID/암호 와 트윗메시지만 이 함수에 남기면 바로 트윗이 됩니다. ( 이렇게 남긴글은 트위터 클라이언트에서 볼때 via API 라고 붙습니다. )

이제 이 함수를 가지고 진짜 파워포인트를 이용한 발표시에 사용할수 있도록 만들어보죠. 기본 아이디어는 다음과 같습니다.

각 슬라이드의 발표노트 부분에 주제요약문을 적어두고, 발표시 매 슬라이드마다 자동으로 그 주제요약한 내용이 트윗되도록 한다.

이를 위해서 기본 이벤트인 OnSlideShowPageChange 이벤트를 사용합니다. 이 이벤트는 슬라이쇼 진행시 매 페이지마다 파워포인트가 한번씩 자동으로 불러주는 이벤트입니다.

' 유틸리티 함수로 A 문자열부터 B 문자열 사이의 값을 읽어옵니다.
' 나나나[a]가가가[b]다다다 일때 , [a] 에서 [b] 사이의 "가가가" 문자열만 빼올때 사용합니다.
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
Sub OnSlideShowPageChange(ByVal SSW As SlideShowWindow)
    Dim Shp  As Shape
    Dim S As String
    On Error Resume Next
    S = ""
   ' 매 페이지의 노트안에 [twitter] [/twitter] 로 묶인 문자열이 있으면 자동으로 트윗합니다.
    With SSW.View.Slide.NotesPage
        For Each Shp In .Shapes
            If Shp.Type = msoPlaceholder Then
                If Shp.PlaceholderFormat.Type = ppPlaceholderBody Then
                    S = getStringBetween(Shp.TextFrame.TextRange.Text, "[twitter]", "[/twitter]")
                    If S <> "" Then
                        strResponse = Tweet(S, "트위터 ID", "트위터 암호")
                    End If
                End If
            End If
        Next
    End With
End Sub

위 소스는 각 페이지마다 자동으로 실행되는 이벤트에서 발표 노트안에 [twitter] , [/twitter] 로 묶인 문자열이 있으면 그걸 자동으로 트윗하는 소스입니다.
이제 아래처럼 각 슬라이드의 노트에 각 슬라이드의 요약내용을 적으시면 자동으로 트윗이 됩니다.

자동으로 트윗되도록 작성한 노트 예제

이렇게 노트에 요약을 적고, 사이트의 주소까지 적어주면 트위터에서 보시는 분들은 바로 클릭해서 볼수 있어서 편리합니다.
( 이 Twumped 사이트 많이들 좋아하시더군요. 국내 도입이 시급합니다. ^^; )

그런데, 현재 소스엔 큰 문제가 하나 있습니다. 바로 소스내에 자신의 트위터 ID/암호가 노출이 된다는 것이죠. 보통 발표자료는 운영측에 먼저 제출하거나 해야하는데 자신의 암호가 노출되면 안되겠죠 ? 그래서 노출이 안되도록 해봅니다.

아래와 같이 로그인창을 하나 만듭니다. 간단하게 구현한거니 취소버튼도 없습니다 🙂

트위터 로그인창

텍스트 박스 2개의 이름을 txtUID , txtPWD 로 주고, Login 버튼의 Default 속성을 True 로 주면 끝입니다. 코딩은 필요없습니다.

이제 앞에 만든 소스를 조금 수정해 봅니다.

Sub OnSlideShowPageChange(ByVal SSW As SlideShowWindow)
    Static strUID As String
    Static strPWD As String
   ' 첫번째 슬라이드 일경우 로그인창을 띄워서 트위터 ID 와 PWD 를 얻어옵니다.
    If SSW.View.CurrentShowPosition = 1 Then
        Load frmLogin
        frmLogin.Show
        strUID = frmLogin.txtUID
        strPWD = frmLogin.txtPWD
        Unload frmLogin
    End If
    Dim Shp  As Shape
    Dim S As String
    On Error Resume Next
    S = ""
    With SSW.View.Slide.NotesPage
        For Each Shp In .Shapes
            If Shp.Type = msoPlaceholder Then
                If Shp.PlaceholderFormat.Type = ppPlaceholderBody Then
                    S = getStringBetween(Shp.TextFrame.TextRange.Text, "[twitter]", "[/twitter]")
                    If S <> "" Then
                        strResponse = Tweet(S, strUID, strPWD)
                    End If
                End If
            End If
        Next
    End With
End Sub

더 멋지게 구현하려면 SlideShowBegin 시에 물어야 하겠지만 자동 이벤트가 아니여서, 클래스 선언등의 복잡한 작업이 있는지라 그냥 편하게 첫번째 슬라이드 뜰때 묻도록 했습니다. ID/암호는 그냥 Static 에 저장해두고 쓰구요. 🙂

이제 F5 키를 눌러서 슬라이드 쇼를 실행하면 아래와 같은 로그인창이 뜨고 ID/암호를 입력할수 있습니다.

트위터 ID/암호 입력

조금 더 편하게 사용하시려면, PPT 편집시 로그인 창에 자신의 트위터 ID 는 기본으로 입력해두시고, 암호창에 tabIndex 를 0번으로 해두시면 뜰때마다 암호창에 포커스가 가니까 바로 암호만 입력후 엔터치시면 됩니다.

완성된 소스입니다.

Sub OnSlideShowPageChange(ByVal SSW As SlideShowWindow)
    Static strUID As String
    Static strPWD As String
    If SSW.View.CurrentShowPosition = 1 Then
        Load frmLogin
        frmLogin.Show
        strUID = frmLogin.txtUID
        strPWD = frmLogin.txtPWD
        Unload frmLogin
    End If
    Dim Shp  As Shape
    Dim S As String
    On Error Resume Next
    S = ""
    With SSW.View.Slide.NotesPage
        For Each Shp In .Shapes
            If Shp.Type = msoPlaceholder Then
                If Shp.PlaceholderFormat.Type = ppPlaceholderBody Then
                    S = getStringBetween(Shp.TextFrame.TextRange.Text, "[twitter]", "[/twitter]")
                    If S <> "" Then
                        strResponse = Tweet(S, strUID, strPWD)
                        If SSW.View.CurrentShowPosition = 3 Then
                            If (getStringBetween(strResponse, "", "") > 0) Then
                                MsgBox "파워포인트 자동트윗이 성공하였습니다 by @xguru"
                            Else
                                MsgBox "트위터 서버 연결에 오류가 있습니다. by @xguru"
                            End If
                        End If
                    End If
                End If
            End If
        Next
    End With
End Sub
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 Tweet(tweetmsg, uid, pwd)
     Dim objHTTP As Object
     Set objHTTP = CreateObject("Microsoft.XMLHTTP")
          objHTTP.Open "POST", "http://twitter.com/statuses/update.xml", False, uid, pwd
          objHTTP.send "status=" & tweetmsg
          Tweet = objHTTP.responseText
     Set objHTTP = Nothing
End Function

저는 발표중에 이 파워포인트+트위터 매쉬업을 사용한다는 것을 소개하기 위해 3번 슬라이드일 경우 트윗이 제대로 포스팅 되었는지 확인할수 있도록 메시지 창을 띄웠습니다.

기본적으로 약간의 VBA 지식이 있으셔야 해서 이정도로 설명이 잘 되었는지 모르겠네요.

예제로 제가 만든 트위터 API를 활용한 국내외 다양한 매쉬업 사례 파일을 올려드리니 한번 사용해 보시기 바랍니다. 꽤 많은 트윗메시지가 저장되어 있으니, 자신의 계정으로 바로 테스트 하지 마시고 테스트용 트위터 계정을 하나 만드셔서 해보시길 권해드립니다. 다운 받아서 오픈한후 보안경고 창에서 매크로 사용토록 확인해주셔야 기능이 동작됩니다.

▶ 예제파일 다운로드 : 트위터 매쉬업 매크로가 포함된 트위터 API를 활용한 국내외 다양한 매쉬업 사례 다운받기 – 제 Dropbox 입니다.

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

엉뚱한 개발자 구루였습니다. 문의사항 있으시면 트위터 @xguru 나 블로그에 남겨주세요.

트위터 API를 활용한 국내외 다양한 매쉬업 사례

1월 15일 금요일날 열린 “트위터&SNS 컨퍼런스 2010” 에서 제가 발표한 자료를 공개합니다.

발표 제목은 “Twitter API Mashups – 트위터 API를 활용한 국내외 다양한 매쉬업 사례” 입니다.
현재 트위터와 연관된 어플리케이션의 현황을 알아보고, 다양한 국내외 사례와 앞으로 트위터 매쉬업이 어떻게 발전해 갈것인지를 적어봤습니다.

  1. Twitter 어플리케이션 현황
  2. Twitter 어플리케이션의 종류
    • 단점을 보완하는 서비스들
    • 장점을 이용하는 서비스들
    • 다른 서비스의 연계
  3. Twitter Mashup 서비스 사례
    • 국외 서비스
    • 국내 서비스
  4. Twitter Mashup 어플리케이션의 전망

위와 같은 목차로 진행되었구요. 매쉬업에 대한 소개이니 제 설명이 없어도 보실수는 있습니다.
다만.. 발표 자료만으로는 제가 발표를 통해 전하고 싶었던 것을 다 보시긴 힘들듯 합니다 🙂
실제 강의에선 슬라이드에 있는 각각의 항목에 대해 좀더 알기쉽게 자세히 설명했습니다만 음.. 정말 그랬는지는 들으신 분들께 🙂

이렇게 잘 만들어진 API 만 있으면 다양한 매쉬업이 만들어질수 있다는걸 보시고 국내 개발자/업체 분들도 자극받으시기 바랍니다.
예전에 소개해드린 Slideshare 를 통해 공유합니다.

트위터 메쉬업에 대해 궁금하시거나 발표문서에 대한 문의는 트위터나 첫장에 있는 제 이메일로 부탁드립니다.

이 파일에 원래는 파워포인트와 트위터를 연동하는 것이 들어있는데, 매크로 포함파일은 공유가 안되어서..
파워포인트+트위터 매쉬업에 관한 내용은 따로 상세설명과 함께 내일쯤 포스팅 하겠습니다.