YahooPipes 페이지의 소스 보기
마지막으로 [b]
-- Loading page list... --
내용출력
로그인[l]
Diary
[f]
최근변경내역
[r]
페이지목록[i]
횡설수설[2]
게시판[3]
링크
수정할 수 없습니다: YahooPipes 는 읽기 전용 페이지입니다.
== # yahoo pipe 란 == http://pipes.yahoo.com/pipes/ RSS 데이타를 가져와서, 제공되는 모듈들을 조립하여 데이타에 원하는 가공을 한 후 새로운 RSS로 출력해주는 서비스. 음, 한참 떠들썩할 때는 관심 없었는데, 이거 잘 쓰면 굳이 내가 끙끙대며 프로그램 짜지 않고 꽤 쉽게 [[RSS]]를 만들어낼 수 있겠다...고 생각을 했는데 막상 끄적거려보니 그냥 프로그래밍하는 게 나을 것 같기도 하고 -ㅅ-;;; 프로그래밍 경험이 전혀 없는 사람에게는 상당히 유용한 툴일 듯 하다. 단 HTML소스나 RSS소스를 보면서 "요걸 요렇게 고쳐주면 되겠군..."이라고 판단할 수 있어야 하겠고, 본격적인 조작을 하려면 [[정규표현식]]을 알아야 하는데 이게 초심자에게는 만만하진 않겠다. 얼핏 보니 [[Perl/정규표현식]]의 문법을 거의 동일하게 쓸 수 있는 듯 하다. 각각의 모듈에다가 주석을 달 수 있으면 나중에 수정할 때나 다른 사람이 만든 파이프를 볼 때 이해하기 더 쉬울텐데 그럴 수가 없어서 아쉽다. == # 만들어보자 == === # 단순한 포워딩 === 아마도 제일 단순한 형태. * 원본 피드: http://feeds.oreilly.com/oreilly/perl O'Reilly의 Perl관련 RSS 희한하게 [http://hanrss.com 한RSS]에서 저 피드를 등록을 하려고 하면 제대로 분석이 안 되는지 에러가 나면서 등록이 되지 않는다. 혹시나 해서 이 RSS를 고스란히 받아서 그대로 내보내주는 파이프를 만들어 봄: * 완성된 파이프: http://pipes.yahoo.com/raymundo/oreillynews_perl (yahoo 아이디가 있어야 하고, IE6에서는 안 보임) || Upload:pipe_simple_forwarding.png || || Sources 카테고리의
모듈 -> Pipe Output || 결국 아무것도 변경하지 않고 원래의 피드를 그대로 사용하는 셈인데, (구체적인 포맷은 파이프를 거치면서 바뀌어있음) 이건 등록이 된다. :-D === # 항목의 값을 외부 입력으로 받음 === 위의 파이프에서, 원본 피드를 고정하는 게 아니라 사용자가 입력한 값을 받아서 처리하게 한다. * 완성된 파이프: http://pipes.yahoo.com/raymundo/simple_forwarding || Upload:pipe_simple_forwarding_user_input.png || || User Inputs-
-> Sources-
-> Pipe Output || 이 파이프를 실행하면 "Feed URL"을 입력받은 후에 그 값을 원본 피드의 주소로 지정하여 처리한다. 그 결과를 RSS로 만들 경우는 RSS주소의 뒷부분에
&feedurl=입력한주소
형태로 덧붙는다. "feedurl"은 모듈에서 "Name"항목에 넣어준 값. === # 뉴스그룹에서 특정 작성자의 포스팅만 골라내기 === * 원본 피드: http://groups.google.com/group/comp.lang.perl.misc/feed/rss_v2_0_msgs.xml?num=100 - comp.lang.perl.misc NewsGroup의 새 포스팅 RSS 이 그룹에는 글이 너무 많이 올라와서 다 챙겨보기 힘들다. 보통은 제목을 쓱 보고 골라서 보는 편이다. 그런데 특정한 조건에 해당되는 포스트, 예를 들어 어떤 단어가 들어가 있다던가, 작성자가 특정인물인 경우만 따로 RSS로 만들어 보고 싶다면: * 완성된 파이프: http://pipes.yahoo.com/raymundo/comp_lang_perl_misc_author_filter ** author 필드에 "Randal L. Schwartz" 또는 "PerlFAQ Server"가 들어가 있는 RSS 아이템들만 추려낸다 || Upload:pipe_author_filter.png || ||
-> Operators-
-> Pipe Output || === # 댓글 수가 많이 달린 게시물만 골라내기 === * 원본 피드: http://feeds2.feedburner.com/Clien--free - [[클리앙]] 자유게시판 RSS. [[주인장]]이 [[Perl]]로 작성한 스크립트를 사용하여 클리앙 게시판 목록을 보고 RSS 피드로 만들어서 사용하고 있었고, 댓글이 많이 달린 게시물만 따로 추려서 별도의 RSS도 만들었는데, 이걸 파이프로 만들어 봄: * 완성된 파이프: http://pipes.yahoo.com/raymundo/clien_hot_topics || Upload:pipe_condition_filter.png || *
: 원본 피드를 가져오고 * Operators-
: 피드 안에 있는 title 필드를 복제해서 comments 필드라고 이름을 붙임 * Operators-
: comments 필드, 즉 원래 title 필드에는 글제목 뒤에 댓글 수가 "
[숫자]
"형태로 붙어 있다. 이것을 정규표현식 치환을 사용하여 숫자만 뽑아낸다. ** 예: ''안녕하세요 [17]'' 에서 ''17'' 만 남김 *
: comments 필드의 값이 지정된 숫자보다 큰 아이템만 골라내어 Pipe Output으로 보낸다. ** 이 때 기준이 되는 숫자는 사용자 입력으로부터 받는다. User inputs-
모듈을 써서 숫자를 받고, Number-
모듈을 써서 그 숫자에서 1을 빼어서 Filter 모듈로 넘겨준다. === # 둘 이상의 피드를 합쳐서 하나의 피드로 만들기 === 아주 간단하게 유용한 피드를 만들 수 있는 방법 중 하나. * 원본 피드: http://cartoon.media.daum.net/series/rss/ikki.xml - 미디어 다음 만화속 세상 중 "이끼" RSS * 원본 피드: http://cartoon.media.daum.net/series/rss/flying.xml - 마찬가지로 만화속 세상 중 "비행접시" RSS 다음의 [http://cartoon.media.daum.net/ 만화속 세상] 같은 경우는 개별 작품마다 RSS를 제공한다. 물론 이것도 매우 감지덕지한 일이다. 그렇지만 RSS리더에 일일이 만화마다 따로 등록하자니 등록된 피드 갯수가 많아져서 정신없다. 두 피드를 합쳐서 하나의 피드로 만들어보자: * 완성된 파이프: http://pipes.yahoo.com/raymundo/union_1 || Upload:pipes_union_1.png || || 두 개의
-> Operators-
-> Pipes Output || * Union 모듈을 사용하여 두 개 이상의 피드를 합쳐서 하나의 피드로 만든다. === # 여러 피드를 합치기 - 루프 모듈을 사용하는 예 === * 원본 피드: http://cartoon.media.daum.net/series/rss/ikki.xml - 미디어 다음 만화속 세상 중 "이끼" RSS * 원본 피드: http://cartoon.media.daum.net/series/rss/flying.xml - 만화속 세상 중 "비행접시" RSS * 원본 피드: http://cartoon.media.daum.net/series/rss/ufo.xml - 만화속 세상 중 "환상스케치" RSS 다수의 피드를 합쳐 하나의 피드로 만들고 싶을때는, 위에서 본 것처럼
모듈을 원본 피드 갯수만큼 생성하고
으로 합치면 된다. 그런데 원본 피드가 수십개씩 된다면 뭔가 좀 정신없어 보일 것이다. (사실 파이프를 작성할 때 어떻게 보이든 무슨 상관이랴, 동작만 제대로 하면 되지...) Operators-
모듈을 사용하여 동일한 작업을 반복하는 경우를 만들어보자: Loop 모듈은, 다수의 아이템의 리스트(피드 자체도 각각의 글이 하나의 아이템인 리스트이다)를 받아서 각 아이템에 대해서 지정한 연산을 수행하고, 그 결과를 다시 리스트로 내보낸다. 위에서 보면 원본 피드 세 개의 주소가 거의 동일하고, 마지막에 xml 파일의 이름만 달라진다. 따라서 저 자리에 각각의 이름을 바꿔넣어서 피드의 주소를 완성시키는 동작을 시켜보자. {{{ http://cartoon.media.daum.net/series/rss/______.xml 이 자리에 ikki, flying, ufo 를 번갈아가며 넣는다 }}} 일단 번갈아 빈 자리에 들어갈 문자열의 리스트를 만들자: || Upload:pipes_union_2_1.png || || Strings-
-> Strings-
|| *
는 단순히 하나의 문자열을 만들어준다. "+"버튼을 눌러서 칸 수를 세 개로 늘린 다음, 각각 "ikki," "flying," "ufo,"라고 적어주면, 이 모듈은 이 문자열들을 합쳐서 "ikki,flying,ufo,"라는 하나의 문자열을 만든다. *
는 하나의 문자열을 잘라내어서 다수의 문자열의 리스트를 만든다. 어디를 자를지 결정하는 것이 "Delimiter"이다. 여기에 ","를 적어주고 아래의 디버거 창을 보면 세 개의 아이템이 있고, ","를 기준으로 잘라낸 나머지 단어들이 각 아이템의
content
필드의 값으로 들어가 있는 것을 알 수 있다. 이제 이 문자열 리스트로부터 피드 주소 세 개를 만든다: || Upload:pipes_union_2_2.png || || 앞 그림 ->
|| * Loop 모듈을 드래그해서 하나 가져다 놓고, 다시
모듈을 드래그해서 Loop 모듈 안에 있는 빈 영역에 넣어서 합체시킨다. * String Builder의 세 칸 중 ** 처음 칸에는 "http://cartoon.media.daum.net/series/rss/", 즉 피드 주소의 앞쪽의 공통된 문자열을 적어주고 ** 두번째 칸에는 Tokenizer 모듈에서 넘어온 아이템의 content 필드를 지정 (우측의 삼각형을 클릭해서 선택할 수 있다) ** 세번째 칸에는 ".xml", 즉 피드 주소의 뒤쪽의 공통된 문자열을 적어준다. * 이렇게 생성된 결과를 다시 특정한 필드의 값으로 넣을 수도 있고, 그냥 내보낼 수도 있다. 여기서는 그냥 내보내기("emit results")를 선택했다. * 디버그 창을 보면, 세 개의 피드 주소가 완성되어 있는 걸 알 수 있다. 이 "주소들의 리스트"를 사용해서 피드를 가져와야 하므로: * 완성된 파이프: http://pipes.yahoo.com/raymundo/union_2 || Upload:pipes_union_2_3.png || || 앞 그림 ->
-> Pipes Output || * 한번 더 루프를 돌면서, 이번에는
를 루프 안에 넣어서 각각의 주소에 대해 피드를 가져오게 한다. ==== # 그런데 사실은... ==== 단순하게 여러 개의 피드를 합치는 경우라면, 굳이 이렇게 복잡하게 할 것 없다. Union을 쓸 필요도 없다. 그냥
모듈에서 "+"버튼을 눌러서 칸 수를 늘린 후 각각의 칸에 원하는 피드 주소를 적어주면 그만이다. :-D 이번 예제와 전 예제는 단지 모듈들의 동작을 테스트하기 위해서 복잡하게 했을 뿐. || Upload:pipes_union_2_4.png || || 이러면 된다는 얘기 || == # 참고 == * [http://syaa.tistory.com/104 입맛에 맞게 재구성해서 사용하는 RSS - YAHOO PIPE -- 취미생활 블로깅 ::] * [http://1kko.com/entry/야후-파이프를-이용해서-네이버-웹툰을-RSS-Feed로-받아보기 이코의 세상 :: 야후 파이프를 이용해서 네이버 웹툰을 RSS Feed로 받아보기] * [http://1kko.com/entry/야후-파이프-좀더-자세하게 이코의 세상 :: 야후 파이프. 좀더 자세하게] == # Comments ==
----
---- [[컴퓨터분류]]
YahooPipes
페이지로 돌아가기 |
다른 수정본 보기