parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Ответ

Ivan Sergeev 04.02.2013 06:26

Вот авторизация на YouTube, выдрал куски кода из одного прокта. Думаю, что не составит труда модифицировать под свои нужды: ведь там единая авторизация.
@USE
io/pfCFile.p

@auto[]

	$YouTube[
		$.ready(false)
	]

@main[]
	
	^pfCFile:session{
		^if(^clientLogin[]){
			
			^if(^getToken[]){
				
				^rem{ Все ок, можно делать что-то дальше }	
			}{
				^rem{ Токен не получен }
			}
		}{
			^rem{ Клиент не атворизован }
		}
	}


@clientLogin[][res;data]
	
	$result(false)
	
	^try{

		$res[^pfCFile:load[text;https://www.google.com/youtube/accounts/ClientLogin;
			$.charset[UTF-8]
			$.content-type[application/x-www-form-urlencoded]
			$.enctype[application/x-www-form-urlencoded]
			$.timeout(20)
			$.method[POST]
			$.any-status(true)
			$.headers[
				$.X-GData-Key[key=Здесь надо вставить хеш-строку с ключом]
			]
			$.form[
				$.Email[Почта]
				$.Passwd[Пароль]
				$.service[youtube] ^rem{ Пример для YouTube }
				$.source[Проект]
			]
		] ]

		^if($res.status == 200){
		
			$data[^string:js-unescape[$es.text]]
			$data[^str.split[^#0A;lh]]
			
			^if($data is table){

				$YouTube.auth[^data.0.trim[left;Auth=]]
				$YouTube.user[^data.1.trim[left;YouTubeUser=]]
				
				^if(def $YouTube.auth &&  def $YouTube.user){
					
					$YouTube.ready(true)
					
					$result(true)
					
				}{
					^rem{ Ошибка авторизации }
				}
			}{
				^rem{ Какое-то не правильное содержание ответа }
			}
			
		}{
			^rem{ Ошибка c ответом }
		}

	}{
		$exception.handled(true)

		^rem{ Ошибка с запросом }
	}

@getToken[][res;data]
	
	$result(false)
	
	^if($YouTube.ready){
		
		$xmlfile[^file::create[text;ut;$str]]
		
		$res[^file::exec[getYouTubeToken.sh;
				$.CGI_AUTH[$YouTube.auth]
			]]
			
		^if( $res.status == 0 ){

			^try{

				^if(def $res.text){
				
					$data[^xdoc::create{$res.text}]
					
					$YouTube.url[^data.selectString[string(response/url)]]
					$YouTube.token[^data.selectString[string(response/token)]]
					
					^if(def $YouTube.url && def $YouTube.token){
						
						$result(true)
						
					}{
						^rem{ Токен не получен, значит что-то не так с запросом/авторизацией }
					}
					
				}{
					^rem{ Какое-то не правильное содержание ответа }
				}
			}{
				$exception.handled(true)
				^rem{ Какое-то не правильное содержание ответа }	
			}
			
		}{
			^rem{ Ошибка c ответом }
		}
	}
	

Содержимое getYouTubeToken.sh

curl --url 'http://gdata.youtube.com/action/GetUploadToken' \
--request POST \
--header 'Content-Type: application/atom+xml; charset=UTF-8' \
--header 'Content-Length: 'Размер отправляемого содержимого (xml)'  \
--header 'Authorization: GoogleLogin auth='$CGI_AUTH \
--header 'X-GData-Key: key=Здесь надо вставить хеш-строку с ключом' \
--connect-timeout 15 \
--data '<?xml version="1.0" encoding="UTF-8"?><entry xmlns="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" xmlns:yt="http://gdata.youtube.com/schemas/2007"><yt:accessControl action="list" permission="denied"/><yt:accessControl action="comment" permission="denied"/><media:group><media:title type="plain">Проект</media:title><media:description type="plain">0</media:description><media:category scheme="http://gdata.youtube.com/schemas/2007/categories.cat">People</media:category><media:keywords>Ключево слово</media:keywords></media:group></entry>'