[첫화면으로]YahooPipes

마지막으로 [b]

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])
1600 hits | Permalink | 변경내역 보기 [h] | 페이지 소스 보기