UseModWiki소스수정/Twitter연동 페이지의 소스 보기
마지막으로 [b]
-- Loading page list... --
내용출력
로그인[l]
Diary
[f]
최근변경내역
[r]
페이지목록[i]
횡설수설[2]
게시판[3]
링크
수정할 수 없습니다: UseModWiki소스수정/Twitter연동 는 읽기 전용 페이지입니다.
== # Twitter 연동 == 위키에서 페이지를 변경하거나 했을 때 트위터에도 자동으로 글이 올라가게 하는 패치를 고려하는데, 일단 [[/Comments매크로]]와 [[/Thread매크로]], 페이지 수정에 적용된 상태. Jof:UseModWiki소스수정/Twitter로_보내기""를 참고했음. * 필수 요구 사항: ** 트위터 인터페이스를 제공하는 Cpan:Net::Twitter::Lite 모듈이 필요한데, 의존성이 복잡하게 걸려 있어서 [[Perl/모듈설치]]에 익숙하지 않은채로 하기 좀 힘들어보인다. 호스팅 업체에 요청해야 할 듯. *** 2013-06-11부터 API 1.1 을 사용해야 한다. 위 모듈을 설치하면 Cpan:Net::Twitter::Lite::WithAPIv1_1 모듈도 같이 들어 있고, 이것을 사용한다. ** 2010년 9월부터 트위터API를 쓰기 위해서는 OAuth 방식으로 인증해야 한다. Net::Twitter::Lite 에서 Cpan:Net::OAuth 를 사용하게 되어 있으므로 이 모듈도 있어야 한다. ** [[/EncodeUrl함수]] ** "OAuth 인증을 하기 위한 키 발급받기" 항목을 참조하여 키와 토큰을 발급받아야 함 * 선택 요구 사항: === # 사용법 === ==== # comments, longcomments, threads, 횡설수설 링크 올리기 ==== * [[/Comments매크로]], [[/LongComments매크로]], [[/Thread매크로]] ** 관리자 권한이 있는 아이디로 로그인했고, [[/Configuration]] 파일에 트위터 아이디와 패스가 적혀 있을때 ** 매크로 "달기" 버튼 옆에 트위터에도 올릴 것인지를 체크하는 박스가 뜬다. Upload:thread_twitter.png \\ (thread 매크로의 경우) ** 체크한 경우 텍스트박스 안에 있는 내용을 다음과 같이 가공하고 *** 올리기 전에 26글자보다 긴 URL은 [http://tinyurl.com/ TinyURL]을 사용하여 짧게 줄임 *** URL 변환 후에 남은 텍스트가 140자보다 길 경우 140자에서 자름 ** config 파일에 있는 아이디와 암호를 이용하여 트위터에 올린다. ** 예: Upload:thread_twitter_example.png \\ ([[횡설수설]]에 올린 내용이 트위터에도 그대로 올라간 모습) ==== # 페이지 수정 ==== * 페이지 수정 ** 마찬가지로 관리자 권한이 있는 아이디로 로그인했고, [[/Configuration]] 파일에 트위터 아이디와 패스가 적혀 있을때, ** 페이지 저장 버튼 위에 트위터에도 올릴 것인지를 체크하는 박스가 뜬다. Upload:pageedit_twitter.png \\ (페이지 수정의 경우) ** 체크한 경우, *** '''
<페이지URL> <페이지이름>: <변경사항요약>''' 형태로 메시지를 만든 후에 *** URL 은 TinyURL을 사용하여 짧게 줄이고 *** 140자보다 긴 부분은 자른 후 ** 트위터에 올린다. ** 예: Upload:2_pageedit_twitter_example.png \\ (이 페이지를 수정하고 저장할 때 트위터에 올라간 모습) ==== # 설정 ==== * 트위터 아이디와 암호, prefix는 config.pl 파일에서 다음과 같이 적어준다: * (OAuth 인증을 하게 되었으므로 기존의 TwitterPass와 TwitterID는 둘 다 필요가 없는데, 소스를 최소한으로 수정하려고 하니 ID는 계속 사용하게 되었다 -_-; 큰 의미는 없으므로 빈문자열이 아닌 아무 값이나 줘도 상관없다) {{{#!vim perl ### Twitter $TwitterID = "트위터아이디"; # $TwitterPass = "암호"; # 사용하지 않는다 $TwitterPrefix = "앞에 붙을 문자열"; ### Twitter OAuth - 발급받은 값을 따옴표 안에 각각 적어준다 $TwitterConsumerKey = ""; # consumer_key $TwitterConsumerSecret = ""; # consumer_secret $TwitterAccessToken = ""; # access_token $TwitterAccessTokenSecret = ""; # access_token_secret }}} === # OAuth 인증을 하기 위한 키 발급받기 === * 참고: [http://qscripts.blogspot.com/2010/05/post-to-twitter-from-perl-using-single.html Quick Scripts: Post to Twitter from Perl using a single access token] * 이 섹션의 내용은, 오직 하나의 트위터 계정(위키 운영자의 계정)에 올리는 경우에 해당하는 것이다. # [http://dev.twitter.com/ dev.twitter.com]에 간다. 자기가 사용할 계정으로 로그인한다. # "2 Register an app"를 클릭하여 자기가 사용할 위키를 등록한다. ## Application Name: - 적당히 지어준다. 여기 적은 이름이 트위터 홈페이지에서 "via 클라이언트이름" 자리에 나오니 너무 엉망으로 짓진 말자 :-) ## Description: - [[주인장]]의 경우 적당히 "I'm using my own Perl script to post to my twitter account."라고 적어주었다. 설마 이거 애매하게 적으면 잘리거나 하진 않겠지; ## Application Website: - 딱히 적을 말이 없는데 필수 항목이라서 할 수 없이 내 홈페이지 주소를 적었다. 이 주소가 "via 클라이언트이름" 자리에 링크가 걸린다. ## Organizaion: - 적당히 ## Application Type: - "Client" 선택 ## Default Access type: - "Read & Write" 선택 ## 마지막에 CAPTCHA 적는 곳을 채워준 후 하단 "Register application" 버튼 클릭 # 방금 등록한 애플리케이션의 정보가 나오는데, 여기에서 '''"Consumer key"'''와 '''"Consumer secret"'''값을 메모해둔다. # 우측에 "My Access Token" 클릭 # 이 화면에서 '''"access token"'''과 '''"access token secret"''' 값을 메모해둔다. === # 주의사항 및 부작용 === * 일단, 트위터암호가 그대로 설정 파일에 적혀 있는게 좀 기분이 안 좋다. * 특정한 트위터 계정 하나를 지정하게 되어 있는 것이라서, 아래와 같은 문제가 있다 ** 위키를 다수가 편집하면서 사용하는 경우에 다수가 각자의 트위터를 쓴다던가 하는 게 불가능 ** 타인이 맘대로 그 계정으로 트위터에 올리면 곤란하기 때문에 관리자 권한이 있는 사람만 사용할 수 있는 것도 한계점 ** 코멘트 매크로 입력폼 옆에 트위터아이디와 암호를 넣는 필드를 만들어서, 자기가 원하는 아이디와 암호를 그때그때 적을 수 있게 할까 생각도 했는데, 딱히 https 전송을 지원하는 것도 아니면서 그렇게 넣는 게 더 불안할 것 같아서 망설이고 있는 상태 * 시스템에 설치된 Net::Twitter::Lite 모듈과 URI 모듈의 버전에 따라서 소스가 좀 달라져야 한다. (정확히 어느 버전부터 어떻게 되는지 파악을 못 하겠음) ** wiki.pl 의
PostTwitter
서브루틴에서 다음 라인을 주석처리 ** 만일 한글이 깨져서 나온다면 주석을 해제해 주어야 함 {{{#!vim perl # URI 모듈 1.40 이상을 쓰는 경우는 아래 주석 처리 # $msg = Encode::encode("UTF-8", $msg); }}} === # wiki.pl 수정 === 트위터아이디와 암호를 저장하는 환경변수 추가 {{{#!vim perl ### 패치를 위해 추가된 환경설정 변수 use vars qw( $UserGotoBar $UserGotoBar2 $UserGotoBar3 $UserGotoBar4 ... $TwitterID $TwitterPass $TwitterPrefix $TwitterConsumerKey $TwitterConsumerSecret $TwitterAccessToken $TwitterAccessTokenSecret ); }}} comment 매크로 입력창에 트위터 체크박스 추가 {{{#!vim perl 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; ... } }}} 페이지 수정 화면에 체크박스 추가 {{{#!vim perl sub DoEdit { ... } else { print "
", $q->checkbox(-name=>'recent_edit', -label=>T('This change is a minor edit.')); } # Twitter - 이 단락 추가 if ( UserIsAdmin() and $TwitterID ) { print "
", $q->checkbox(-name=>'twitter_edit', -checked=>0, -label=>T('Twitter')."($TwitterID)"), "\n"; } # 여기까지 if ($EmailNotify) { print " " . ... } }}} 페이지 저장할 때 트위터에 올리는 부분 추가 {{{#!vim perl 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 ... } }}} 다음 함수 통채로 추가: {{{#!vim perl # 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] [$@]"; } } } }}} === # action/addtopic.pl 수정 === [[/웹페이지링크쉽게올리기]] 패치에서 나온 북마클릿을 클릭해서 뜨는 창에도 트위터 체크박스 추가 {{{#!vim perl 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)"). "
\n"; } # 여기까지 # html 출력 print &GetHeader("", $header_msg, ""); ... T('Comment') . ":
". $comment_field . " " ."\n". # 여기 한 줄 추가 $twitter . $q->submit(-name=>"Submit",-value=>(" "x5).T("Submit").(" "x5))."\n". ... } }}} === # action/comments.pl 수정 === 코멘트 입력한 걸 저장하는 시점에 트위터에도 저장하는 루틴 추가: {{{#!vim perl sub action_comments { ... # 트위터 - 여기서부터 추가 if ( GetParam('twitter_comment') and UserIsAdmin() and $TwitterID ) { PostTwitter( $newcomments ); } # 여기까지 DoPostMain($string, $id, "*", $Section{'ts'}, 0, 0, "$pageid$anchor"); return; } }}} === # 추가 업데이트 내역 === ext2.13c - 확인하기 편하도록, 트위터 체크박스에 트위터 아이디를 같이 출력하게 함
ext2.13d - Net::Twitter::Lite 모듈 0.10003과 URI 모듈 1.52로 업데이트하면서 문자열 처리에 어딘가 변경이 생긴 듯. 이제는 UTF-8로 인코딩하지 않고 펄 내부 문자열 형태로 update()의 인자로 넘겨주게 함 ext2.14 - 트위터가 OAuth로만 인증이 가능하게 되었기에 관련 소스 수정
ext2.24 - 굳이 URL을 다른 서비스를 통해 줄이지 않아도 이젠 트위터가 20자 길이의 알아서 URL로 줄여준다. URL 줄이는 부분 제거
ext2.27 - 트위터 API 1.1 을 사용하도록 수정
ext2.27a - 트위터 클라이언트 생성자에
ssl => 1
파라메터 추가. (이제는 필수가 되었음)
=== # 사용자 의견 === 대충 마무리 되었습니다. 이것저것 불만족스러운 부분이 많지만 더 손대려면 한도 끝도 없어서...
하루 지나보니... 내가 만들었지만 잘 만들었군요;; 횡설수설에 올리고 그대로 복사해서 트위터에 붙여넣는게 아주 귀찮았는데...
아. 바벨위키를 요새 다시 업데이트를 열심히 하다 보니 이것도 적용하고 싶은 생각이 드는 군요. 주말에 날 잡아서 한 번 해볼가 하는데 "Perl/모듈설치에 익숙하지 않은채로 하기 좀 힘들어보인다. 호스팅 업체에 요청해야 할 듯." 이 부분이 걸리는군요..
: 그러게요. 기억은 잘 안 나는데 저 모듈이 은근히 의존성이 걸린 모듈이 많았던 걸로.
::그렇군요.. 언제 날 잡아서 시도하든가 해야지, 섣불리하진 못하겠군요..갑사합니다.
:: 아니 뭐 모듈이 없어도 소스 업데이트하는 데는 문제 없습니다. TwitterID 설정변수 값을 주지만 않으면 그냥 예전처럼 동작할 겁니다.
---- [[위키위키분류]]
UseModWiki소스수정/Twitter연동
페이지로 돌아가기 |
다른 수정본 보기