2013-06-29 2 views
0

YouTube GData API를 통해 임의의 비디오 결과를 검색 할 수 있도록 결과 집합에서 사용할 수있는 전체 결과를 기반으로 시작 인덱스를 임의 화하려고합니다. 내가 이것을 할 수 있다고 생각한 두 가지 방법이 있습니다. 첫 번째는 총 결과 수를 bash 변수에 저장하고 2 개의 API 요청을 만들고 두 번째는 로직을 사용하여 결과 세트의 총 동영상 수를 기준으로 시작 색인을 무작위로 추출하여 실제로 "임의"동영상을 검색합니다/비교 함수 (외관상으로는)는 API 질문 자체에서 유효하다.YouTube GData API에서 무작위 비디오 가져 오기

내가 생각할 수있는 다른 방법은 쿼리 자체 (예 : https://developers.google.com/youtube/2.0/developers_guide_protocol_partial#Fields_Formatting_Rules)에서 수학 함수를 사용하기 위해 XData를 사용하는 것이지만 조금은 내가 필요한 구문에 대한 느낌을 얻지 못했습니다. XData 또는 GData API에 익숙하지 않습니다.

현재 첫 번째 방법을 시도 중입니다. Supress grep output but capture it in a variable은 이것과 매우 비슷한 질문입니다.하지만 실제로 시도한 것에 대해서는 답변이 없었고, grep 대신 pcregrep을 사용했기 때문에 훨씬 복잡한 질문에 대해서는 더 좋을 것이라고 생각했습니다. 나는 새로운 질문을한다.

저는 pcregrep의 출력을 bash 변수에 저장하려고하므로 YouTube GData API를 통해 다른 쿼리에서 사용할 수 있습니다.

예 :

출력 리디렉션 (2> & 1)을 제거 할뿐만 아니라 ($로 pcregrep을 둘러싸고하려고 않기 때문에, 빈 변수를 반환
wget -q "https://gdata.youtube.com/feeds/api/videos?author=vice&fields=openSearch:totalResults" -O - | totalResults=`pcregrep -o1 '>([0-9]+)<' 2>&1` | echo $totalResults 

).

어떻게에서 결과를 가질 수 ...

wget -q "https://gdata.youtube.com/feeds/api/videos?author=vice&fields=openSearch:totalResults" -O - | pcregrep -o1 '>([0-9]+)<' 

은 ... 변수에 저장?

실제 검색 조건에서 사용할 수있는 비교/논리 함수를 사용하면 원하는대로 할 수 있습니까? 아니면 단일 API 쿼리로 원하는 것을 수행 할 수 있습니까? 가능한 경우 단일 API 쿼리를 선호합니다.

var=$(wget "http://gd...sults" -O - | pcregrep -o1 ">([0-9]+)<") 

는 또한, 당신이 여기 STDERR을 리디렉션 (2>&1을) 원하지 않는 :

답변

1

당신은 $() 내부 전체 명령 파이프 라인을 넣어해야합니다. 그것은 단지 당신의 결과를 망칠 것입니다. 당신은 당신의 명령에 기록 스트리밍하는 잘 모르는 경우

, 당신은 strace 그것을 식별 할 수

$ strace wget "http://gd...sults" -O - 2>&1 | grep ^write 
... 
write(1, "<?xml version='1.0' encoding='UT"..., 123<?xml ve...ec/open) = 123 
write(1, "searchrss/1.0/'><openSearch:tota"..., 77searchrss...</feed>) = 77

write()의 첫 번째 인수는이 경우 1, 즉 STDOUT에서 파일 기술자의 수 (인).