[첫화면으로]YahooPipes

마지막으로 [b]

변경사항 (가장 최근의 "일반적인 수정"부터) (소소한 수정)

-97,6 +97,56
=== # 여러 피드를 합치기 - 루프 모듈을 사용하는 예 ===
* 원본 피드: 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
다수의 피드를 합쳐 하나의 피드로 만들고 싶을때는, 위에서 본 것처럼 <index(Fetch Feed)>모듈을 원본 피드 갯수만큼 생성하고 <ix(Union)>으로 합치면 된다. 그런데 원본 피드가 수십개씩 된다면 뭔가 좀 정신없어 보일 것이다. (사실 파이프를 작성할 때 어떻게 보이든 무슨 상관이랴, 동작만 제대로 하면 되지...) Operators-<ix(Loop)>모듈을 사용하여 동일한 작업을 반복하는 경우를 만들어보자:
Loop 모듈은, 다수의 아이템의 리스트(피드 자체도 각각의 글이 하나의 아이템인 리스트이다)를 받아서 각 아이템에 대해서 지정한 연산을 수행하고, 그 결과를 다시 리스트로 내보낸다. 위에서 보면 원본 피드 세 개의 주소가 거의 동일하고, 마지막에 xml 파일의 이름만 달라진다. 따라서 저 자리에 각각의 이름을 바꿔넣어서 피드의 주소를 완성시키는 동작을 시켜보자.
{{{
http://cartoon.media.daum.net/series/rss/______.xml 
                             이 자리에 ikki, flying, ufo 를 번갈아가며 넣는다
}}}
일단 번갈아 빈 자리에 들어갈 문자열의 리스트를 만들자:
|| Upload:pipes_union_2_1.png ||
|| Strings-<index(String Builder)> -> Strings-<ix(String Tokenizer)> ||
* <ix(String Builder)>는 단순히 하나의 문자열을 만들어준다. "+"버튼을 눌러서 칸 수를 세 개로 늘린 다음, 각각 "ikki," "flying," "ufo,"라고 적어주면, 이 모듈은 이 문자열들을 합쳐서 "ikki,flying,ufo,"라는 하나의 문자열을 만든다.
* <ix(String Tokenizer)>는 하나의 문자열을 잘라내어서 다수의 문자열의 리스트를 만든다. 어디를 자를지 결정하는 것이 "Delimiter"이다. 여기에 ","를 적어주고 아래의 디버거 창을 보면 세 개의 아이템이 있고, ","를 기준으로 잘라낸 나머지 단어들이 각 아이템의 <code>content</code> 필드의 값으로 들어가 있는 것을 알 수 있다.
이제 이 문자열 리스트로부터 피드 주소 세 개를 만든다:
|| Upload:pipes_union_2_2.png ||
|| 앞 그림 -> <ix(Loop)> ||
* Loop 모듈을 드래그해서 하나 가져다 놓고, 다시 <ix(String Builder)>모듈을 드래그해서 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 ||
|| 앞 그림 -> <ix(Loop)> -> Pipes Output ||
* 한번 더 루프를 돌면서, 이번에는 <ix(Fetch Feed)>를 루프 안에 넣어서 각각의 주소에 대해 피드를 가져오게 한다.
==== # 그런데 사실은... ====
단순하게 여러 개의 피드를 합치는 경우라면, 굳이 이렇게 복잡하게 할 것 없다. Union을 쓸 필요도 없다. 그냥 <ix(Fetch Feed)>모듈에서 "+"버튼을 눌러서 칸 수를 늘린 후 각각의 칸에 원하는 피드 주소를 적어주면 그만이다. :-D 이번 예제와 전 예제는 단지 모듈들의 동작을 테스트하기 위해서 복잡하게 했을 뿐.
|| Upload:pipes_union_2_4.png ||
|| 이러면 된다는 얘기 ||
== # 참고 ==
* [http://syaa.tistory.com/104 입맛에 맞게 재구성해서 사용하는 RSS - YAHOO PIPE -- 취미생활 블로깅 ::]
* [http://1kko.com/entry/야후-파이프를-이용해서-네이버-웹툰을-RSS-Feed로-받아보기 이코의 세상 :: 야후 파이프를 이용해서 네이버 웹툰을 RSS Feed로 받아보기]

-106,7 +156,7
<div class="comments">
<longcomments(100)>
----
<trackbackreceived>
</div>
----
[[컴퓨터분류]]


1. yahoo pipe 란
2. 만들어보자
2.1. 단순한 포워딩
2.2. 항목의 값을 외부 입력으로 받음
2.3. 뉴스그룹에서 특정 작성자의 포스팅만 골라내기
2.4. 댓글 수가 많이 달린 게시물만 골라내기
2.5. 둘 이상의 피드를 합쳐서 하나의 피드로 만들기
2.6. 여러 피드를 합치기 - 루프 모듈을 사용하는 예
2.6.1. 그런데 사실은...
3. 참고
4. Comments

1. yahoo pipe 란

http://pipes.yahoo.com/pipes/

RSS 데이타를 가져와서, 제공되는 모듈들을 조립하여 데이타에 원하는 가공을 한 후 새로운 RSS로 출력해주는 서비스.

음, 한참 떠들썩할 때는 관심 없었는데, 이거 잘 쓰면 굳이 내가 끙끙대며 프로그램 짜지 않고 꽤 쉽게 RSS를 만들어낼 수 있겠다...고 생각을 했는데 막상 끄적거려보니 그냥 프로그래밍하는 게 나을 것 같기도 하고 -ㅅ-;;;

프로그래밍 경험이 전혀 없는 사람에게는 상당히 유용한 툴일 듯 하다. 단 HTML소스나 RSS소스를 보면서 "요걸 요렇게 고쳐주면 되겠군..."이라고 판단할 수 있어야 하겠고, 본격적인 조작을 하려면 정규표현식을 알아야 하는데 이게 초심자에게는 만만하진 않겠다. 얼핏 보니 Perl/정규표현식의 문법을 거의 동일하게 쓸 수 있는 듯 하다.

각각의 모듈에다가 주석을 달 수 있으면 나중에 수정할 때나 다른 사람이 만든 파이프를 볼 때 이해하기 더 쉬울텐데 그럴 수가 없어서 아쉽다.

2. 만들어보자

2.1. 단순한 포워딩

아마도 제일 단순한 형태.

희한하게 [한RSS]에서 저 피드를 등록을 하려고 하면 제대로 분석이 안 되는지 에러가 나면서 등록이 되지 않는다. 혹시나 해서 이 RSS를 고스란히 받아서 그대로 내보내주는 파이프를 만들어 봄:

Upload:pipe_simple_forwarding.png
Sources 카테고리의 Fetch Feed(1) 모듈 -> Pipe Output

결국 아무것도 변경하지 않고 원래의 피드를 그대로 사용하는 셈인데, (구체적인 포맷은 파이프를 거치면서 바뀌어있음) 이건 등록이 된다. :-D

2.2. 항목의 값을 외부 입력으로 받음

위의 파이프에서, 원본 피드를 고정하는 게 아니라 사용자가 입력한 값을 받아서 처리하게 한다.

Upload:pipe_simple_forwarding_user_input.png
User Inputs-URL Input(2) -> Sources-Fetch Feed(3) -> Pipe Output

이 파이프를 실행하면 "Feed URL"을 입력받은 후에 그 값을 원본 피드의 주소로 지정하여 처리한다.

그 결과를 RSS로 만들 경우는 RSS주소의 뒷부분에 &feedurl=입력한주소 형태로 덧붙는다. "feedurl"은 모듈에서 "Name"항목에 넣어준 값.

2.3. 뉴스그룹에서 특정 작성자의 포스팅만 골라내기

이 그룹에는 글이 너무 많이 올라와서 다 챙겨보기 힘들다. 보통은 제목을 쓱 보고 골라서 보는 편이다. 그런데 특정한 조건에 해당되는 포스트, 예를 들어 어떤 단어가 들어가 있다던가, 작성자가 특정인물인 경우만 따로 RSS로 만들어 보고 싶다면:

Upload:pipe_author_filter.png
Fetch Feed(4) -> Operators-Filter(5) -> Pipe Output

2.4. 댓글 수가 많이 달린 게시물만 골라내기

주인장Perl로 작성한 스크립트를 사용하여 클리앙 게시판 목록을 보고 RSS 피드로 만들어서 사용하고 있었고, 댓글이 많이 달린 게시물만 따로 추려서 별도의 RSS도 만들었는데, 이걸 파이프로 만들어 봄:

Upload:pipe_condition_filter.png

2.5. 둘 이상의 피드를 합쳐서 하나의 피드로 만들기

아주 간단하게 유용한 피드를 만들 수 있는 방법 중 하나.

다음의 [만화속 세상] 같은 경우는 개별 작품마다 RSS를 제공한다. 물론 이것도 매우 감지덕지한 일이다. 그렇지만 RSS리더에 일일이 만화마다 따로 등록하자니 등록된 피드 갯수가 많아져서 정신없다.

두 피드를 합쳐서 하나의 피드로 만들어보자:

Upload:pipes_union_1.png
두 개의 Fetch Feed(12) -> Operators-Union(13) -> Pipes Output

2.6. 여러 피드를 합치기 - 루프 모듈을 사용하는 예

다수의 피드를 합쳐 하나의 피드로 만들고 싶을때는, 위에서 본 것처럼 Fetch Feed(14)모듈을 원본 피드 갯수만큼 생성하고 Union(15)으로 합치면 된다. 그런데 원본 피드가 수십개씩 된다면 뭔가 좀 정신없어 보일 것이다. (사실 파이프를 작성할 때 어떻게 보이든 무슨 상관이랴, 동작만 제대로 하면 되지...) Operators-Loop(16)모듈을 사용하여 동일한 작업을 반복하는 경우를 만들어보자:

Loop 모듈은, 다수의 아이템의 리스트(피드 자체도 각각의 글이 하나의 아이템인 리스트이다)를 받아서 각 아이템에 대해서 지정한 연산을 수행하고, 그 결과를 다시 리스트로 내보낸다. 위에서 보면 원본 피드 세 개의 주소가 거의 동일하고, 마지막에 xml 파일의 이름만 달라진다. 따라서 저 자리에 각각의 이름을 바꿔넣어서 피드의 주소를 완성시키는 동작을 시켜보자.
http://cartoon.media.daum.net/series/rss/______.xml 
                             이 자리에 ikki, flying, ufo 를 번갈아가며 넣는다

일단 번갈아 빈 자리에 들어갈 문자열의 리스트를 만들자:

Upload:pipes_union_2_1.png
Strings-String Builder(17) -> Strings-String Tokenizer(18)

이제 이 문자열 리스트로부터 피드 주소 세 개를 만든다:

Upload:pipes_union_2_2.png
앞 그림 -> Loop(21)

이 "주소들의 리스트"를 사용해서 피드를 가져와야 하므로:

Upload:pipes_union_2_3.png
앞 그림 -> Loop(23) -> Pipes Output

2.6.1. 그런데 사실은...

단순하게 여러 개의 피드를 합치는 경우라면, 굳이 이렇게 복잡하게 할 것 없다. Union을 쓸 필요도 없다. 그냥 Fetch Feed(25)모듈에서 "+"버튼을 눌러서 칸 수를 늘린 후 각각의 칸에 원하는 피드 주소를 적어주면 그만이다. :-D 이번 예제와 전 예제는 단지 모듈들의 동작을 테스트하기 위해서 복잡하게 했을 뿐.

Upload:pipes_union_2_4.png
이러면 된다는 얘기

3. 참고

4. Comments

이름:  
Homepage:
내용:
 


컴퓨터분류
찾아보기:
Fetch Feed   1, 3, 4, 6, 12, 14, 24, 25Filter   5, 9Loop   16, 21, 23Number Input   10
Regex   8Rename   7Simple Math   11String Builder   17, 19, 22
String Tokenizer   18, 20Union   13, 15URL Input   2 

마지막 편집일: 2012-2-11 12:25 am (변경사항 [d])
1710 hits | Permalink | 변경내역 보기 [h] | 페이지 소스 보기