[첫화면으로]UseModWiki소스수정/Twitter연동

마지막으로 [b]

1. Twitter 연동
1.1. 사용법
1.1.1. comments, longcomments, threads, 횡설수설 링크 올리기
1.1.2. 페이지 수정
1.1.3. 설정
1.2. OAuth 인증을 하기 위한 키 발급받기
1.3. 주의사항 및 부작용
1.4. wiki.pl 수정
1.5. action/addtopic.pl 수정
1.6. action/comments.pl 수정
1.7. 추가 업데이트 내역
1.8. 사용자 의견

1. Twitter 연동

위키에서 페이지를 변경하거나 했을 때 트위터에도 자동으로 글이 올라가게 하는 패치를 고려하는데, 일단 /Comments매크로/Thread매크로, 페이지 수정에 적용된 상태.

Jof:UseModWiki소스수정/Twitter로_보내기를 참고했음.

1.1. 사용법

1.1.1. comments, longcomments, threads, 횡설수설 링크 올리기

Upload:thread_twitter.png
(thread 매크로의 경우) Upload:thread_twitter_example.png
(횡설수설에 올린 내용이 트위터에도 그대로 올라간 모습)

1.1.2. 페이지 수정

Upload:pageedit_twitter.png
(페이지 수정의 경우) Upload:2_pageedit_twitter_example.png
(이 페이지를 수정하고 저장할 때 트위터에 올라간 모습)

1.1.3. 설정

### Twitter
$TwitterID    = "트위터아이디";
# $TwitterPass  = "암호";  # 사용하지 않는다
$TwitterPrefix = "앞에 붙을 문자열";

### Twitter OAuth - 발급받은 값을 따옴표 안에 각각 적어준다
$TwitterConsumerKey         = "";   # consumer_key
$TwitterConsumerSecret      = "";   # consumer_secret
$TwitterAccessToken         = "";   # access_token
$TwitterAccessTokenSecret   = "";   # access_token_secret

1.2. OAuth 인증을 하기 위한 키 발급받기

  1. [dev.twitter.com]에 간다. 자기가 사용할 계정으로 로그인한다.
  2. "2 Register an app"를 클릭하여 자기가 사용할 위키를 등록한다.
    1. Application Name: - 적당히 지어준다. 여기 적은 이름이 트위터 홈페이지에서 "via 클라이언트이름" 자리에 나오니 너무 엉망으로 짓진 말자 :-)
    2. Description: - 주인장의 경우 적당히 "I'm using my own Perl script to post to my twitter account."라고 적어주었다. 설마 이거 애매하게 적으면 잘리거나 하진 않겠지;
    3. Application Website: - 딱히 적을 말이 없는데 필수 항목이라서 할 수 없이 내 홈페이지 주소를 적었다. 이 주소가 "via 클라이언트이름" 자리에 링크가 걸린다.
    4. Organizaion: - 적당히
    5. Application Type: - "Client" 선택
    6. Default Access type: - "Read & Write" 선택
    7. 마지막에 CAPTCHA 적는 곳을 채워준 후 하단 "Register application" 버튼 클릭
  3. 방금 등록한 애플리케이션의 정보가 나오는데, 여기에서 "Consumer key""Consumer secret"값을 메모해둔다.
  4. 우측에 "My Access Token" 클릭
  5. 이 화면에서 "access token""access token secret" 값을 메모해둔다.

1.3. 주의사항 및 부작용

# URI 모듈 1.40 이상을 쓰는 경우는 아래 주석 처리
#         $msg = Encode::encode("UTF-8", $msg);

1.4. wiki.pl 수정

트위터아이디와 암호를 저장하는 환경변수 추가
### 패치를 위해 추가된 환경설정 변수
use vars qw(
    $UserGotoBar $UserGotoBar2 $UserGotoBar3 $UserGotoBar4
    ...
    $TwitterID $TwitterPass $TwitterPrefix
    $TwitterConsumerKey $TwitterConsumerSecret $TwitterAccessToken $TwitterAccessTokenSecret
    );

comment 매크로 입력창에 트위터 체크박스 추가

sub MacroComments {
    ...
# Twitter - 이 단락 추가
    my $twitter = "";
    if ( UserIsAdmin() and $TwitterID ) {
        $twitter = $q->checkbox(-name=>'twitter_comment', -checked=>0, -label=>T('Twitter')."($TwitterID)"). "\n";
    }
# 여기까지

    $txt =
        $q->startform(-name=>"comments",-method=>"POST",-action=>"$ScriptName") .
        &GetHiddenValue("action","comments") .
        &GetHiddenValue("id",$id) .
        &GetHiddenValue("pageid",$pageid) .
        &GetHiddenValue("up","$up") .
        &GetHiddenValue("ccode","$ccode") .
        (($threadindent ne '')?&GetHiddenValue("threadindent",$threadindent):"") .
        T('Name') . ": " .
        $name_field . " " .
        $spambot_trap .
        T('Comment') . ": " .
        $hidden_long .
        $comment_field . " " .
# 여기 한 줄 추가
        $twitter .
        $submit_button .
        $q->endform;
    ...
}

페이지 수정 화면에 체크박스 추가

sub DoEdit {
    ...
        } else {
            print "<br>", $q->checkbox(-name=>'recent_edit',
                                 -label=>T('This change is a minor edit.'));
        }

# Twitter - 이 단락 추가
        if ( UserIsAdmin() and $TwitterID ) {
            print "<br>", $q->checkbox(-name=>'twitter_edit', -checked=>0, -label=>T('Twitter')."($TwitterID)"), "\n";
        }
# 여기까지

        if ($EmailNotify) {
            print "&nbsp;&nbsp;&nbsp;" .
    ...
}

페이지 저장할 때 트위터에 올리는 부분 추가

sub DoPostMain {
    ...
    &SaveDefaultText();
    &SavePage();
### 링크 목록을 별도로 관리
    &SaveLinkFile($id);
### rss from usemod1.0
#   &WriteRcLog($id, $summary, $isEdit, $editTime, $user, $Section{'host'});
    &WriteRcLog($id, $summary, $isEdit, $editTime, $user, $Section{'host'}, $Section{'revision'});
###

# Twitter - 이 단락 추가
    if ( GetParam('twitter_edit') and UserIsAdmin() and $TwitterID ) {
        $FullUrl = $q->url(-full=>1)  if ($FullUrl eq "");
        my $sum = ": $summary";
        $sum = "" if $sum eq ": *";
        my $url = $FullUrl . &ScriptLinkChar() . $id;
        PostTwitter( "$TwitterPrefix $url $id$sum" );
    }
# 여기까지

    if ($UseCache) {
        UnlinkHtmlCache($id);          # Old cached copy is invalid
    ...
}

다음 함수 통채로 추가:

# Twitter
# $msg - 트위터에 올릴 내용
sub PostTwitter {
    my $msg = shift;

    if ( eval "require Net::Twitter::Lite::WithAPIv1_1;" ) {
        my $msg_length = 140;

        # URL은 %인코딩한 후, t.co로 변환될때 길이가 얼마나 줄어들지(때론 늘어날지) 고려
        my $shorterlink = sub {
            my $url = shift;
            my $converted = EncodeUrl( $url );
            $msg_length += length($converted) - 20;
            return $converted;
        };

        my $nt = Net::Twitter::Lite::WithAPIv1_1->new(
                consumer_key        => $TwitterConsumerKey,
                consumer_secret     => $TwitterConsumerSecret,
                access_token        => $TwitterAccessToken,
                access_token_secret => $TwitterAccessTokenSecret,
                legacy_lists_api => 0,
                ssl => 1,
                );

        # 긴 URL 줄이기
        $msg =~ s/$UrlPattern/$shorterlink->($1)/ge;

        # 140자 제한
        $msg = decode($HttpCharset, $msg);
        $msg = substr($msg, 0, $msg_length);
# URI 모듈 1.40 이상을 쓰는 경우는 아래 주석 처리
#         $msg = encode("UTF-8", $msg);

        my $result = eval { $nt->update($msg) };

        if ( $@ ) {
            my ( undef, $filename, $line, $subroutine ) = caller(0);
            warn "twitter error [$filename:$line:$subroutine] [$@]";
        }
    }
}

1.5. action/addtopic.pl 수정

/웹페이지링크쉽게올리기 패치에서 나온 북마클릿을 클릭해서 뜨는 창에도 트위터 체크박스 추가

sub action_addtopic {
    ...
    $comment_field = &GetTextArea("comment", $default_text, 7, 80);

# Twitter - 이 단락 추가
    my $twitter = "";
    if ( UserIsAdmin() and $TwitterID ) {
        $twitter = $q->checkbox(-name=>'twitter_comment', -checked=>0, -label=>T('Twitter')."($TwitterID)"). "<br>\n";
    }
# 여기까지

    # html 출력
    print &GetHeader("", $header_msg, "");
    ...
        T('Comment') . ":<br>".
        $comment_field . "&nbsp;" ."\n".
# 여기 한 줄 추가
        $twitter .
        $q->submit(-name=>"Submit",-value=>("&nbsp;"x5).T("Submit").("&nbsp;"x5))."\n".
    ...
}

1.6. action/comments.pl 수정

코멘트 입력한 걸 저장하는 시점에 트위터에도 저장하는 루틴 추가:

sub action_comments {
    ...
# 트위터 - 여기서부터 추가
    if ( GetParam('twitter_comment') and UserIsAdmin() and $TwitterID ) {
        PostTwitter( $newcomments );
    }
# 여기까지

    DoPostMain($string, $id, "*", $Section{'ts'}, 0, 0, "$pageid$anchor");
    return;
}

1.7. 추가 업데이트 내역

ext2.13c - 확인하기 편하도록, 트위터 체크박스에 트위터 아이디를 같이 출력하게 함
-- Raymundo 2010-5-28 1:57 pm

ext2.13d - Net::Twitter::Lite 모듈 0.10003과 URI 모듈 1.52로 업데이트하면서 문자열 처리에 어딘가 변경이 생긴 듯. 이제는 UTF-8로 인코딩하지 않고 펄 내부 문자열 형태로 update()의 인자로 넘겨주게 함

ext2.14 - 트위터가 OAuth로만 인증이 가능하게 되었기에 관련 소스 수정

-- Raymundo 2010-9-3 4:32 pm

ext2.24 - 굳이 URL을 다른 서비스를 통해 줄이지 않아도 이젠 트위터가 20자 길이의 알아서 URL로 줄여준다. URL 줄이는 부분 제거

-- Raymundo 2012-3-22 12:53 am

ext2.27 - 트위터 API 1.1 을 사용하도록 수정

-- Raymundo 2013-6-12 5:48 pm

ext2.27a - 트위터 클라이언트 생성자에 ssl => 1 파라메터 추가. (이제는 필수가 되었음)

-- Raymundo 2014-1-20 8:51 pm

1.8. 사용자 의견

대충 마무리 되었습니다. 이것저것 불만족스러운 부분이 많지만 더 손대려면 한도 끝도 없어서...

-- Raymundo 2010-2-7 3:09 am

하루 지나보니... 내가 만들었지만 잘 만들었군요;; 횡설수설에 올리고 그대로 복사해서 트위터에 붙여넣는게 아주 귀찮았는데...

-- Raymundo 2010-2-7 5:24 pm

아. 바벨위키를 요새 다시 업데이트를 열심히 하다 보니 이것도 적용하고 싶은 생각이 드는 군요. 주말에 날 잡아서 한 번 해볼가 하는데 "Perl/모듈설치에 익숙하지 않은채로 하기 좀 힘들어보인다. 호스팅 업체에 요청해야 할 듯." 이 부분이 걸리는군요..

-- Nyxity 2012-11-9 9:31 am

그러게요. 기억은 잘 안 나는데 저 모듈이 은근히 의존성이 걸린 모듈이 많았던 걸로.
-- Raymundo 2012-11-9 11:58 am

그렇군요.. 언제 날 잡아서 시도하든가 해야지, 섣불리하진 못하겠군요..갑사합니다.
-- Nyxity 2012-11-9 1:52 pm

아니 뭐 모듈이 없어도 소스 업데이트하는 데는 문제 없습니다. TwitterID 설정변수 값을 주지만 않으면 그냥 예전처럼 동작할 겁니다.
-- Raymundo 2012-11-9 1:58 pm
이름:  
Homepage:
내용:
 

위키위키분류

마지막 편집일: 2014-1-20 8:51 pm (변경사항 [d])
1726 hits | Permalink | 변경내역 보기 [h] | 페이지 소스 보기