• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

heldrida

Webservices Sapo: AddVideoPost(), Invalid_token ?

8 mensagens neste tópico

Olá,

sou novo pelo portugal-a-programar, e gostaria, se for possivel

a alguém, com mais experiencia, ajudar-me na verificação do código que

desenvolvi para efectuar uploads para a plataforma do sapo.

O erro que tenho estado a obter é de Token inválido;

O código está documentado em ingles, pq à partida achei que seria mais

facil conseguir ajuda assim, em outros foruns, sobretudo onde se tecla

em ingles; Mas descobri este, e ainda bem, decidi juntar-me p\ aprender;

A documentação do sapo indica:

"Adicionar um novo vídeo na plataforma e fazer o upload deste por POST posteriormente.

De modo a fazer o POST do ficheiro é necessário obter um token ao BUS com o randname do vídeo como parâmetro ExtraInfo. Este post deverá conter os seguintes campos: - token: token obtido a partir do BUS; - content_file: ficheiro a carregar; - redir: redireccionamento para o qual a janela de formulário deve ir após o POST (opcional, no caso de não ser passado este parâmetro é devolvido o resultado em XML; caso contrario é passado o resultado no parâmetro error do redireccionamento)."

Assim, fiz os possiveis para segui-lo atraves do seguinte código (se considerarem mais visivel, aqui fica também, http://pastebin.ca/1391282);

A dúvida é, o TOKEN é obtido c\ sucesso, passado para o formulário, no entanto, dá erro; Como resolver?

Criei um utilizador "testewebsapo@sapo.pt" de password "teste1", para possibilitar qqr teste. Também, podem ter acesso a este, imediatamente, através de http://174.132.157.5/~fazuma/temp/sapo_teste/teste_upload.php

Agradeço qualquer sugestão. Obrigado!

-------------------------------------------------------------------

<?php

/*

***RESOURCES***

DOCUMENTATION:

Sapo webservices:
http://developers.sapo.pt/projects/developers/wiki/Services/Videos_EN

Sapo AddvideoPost Method:
http://developers.sapo.pt/projects/developers/wiki/Services/Videos/Operations/AddVideoPost_EN

EXAMPLES:
http://code.google.com/apis/youtube/2.0/developers_guide_protocol_browser_based_uploading.html
http://code.google.com/apis/youtube/2.0/developers_guide_protocol_direct_uploading.html

***TOOLS***

WEBSERVICES ONLINE TESTER:
http://www.soapclient.com/soapclient?template=%2Fclientform.html&fn=soapform&SoapTemplate=%2FSoapResult.html&SoapWSDL=http%3A%2F%2Fservices.sapo.pt%2FMetadata%2FContract%2FVideos&_ArraySize=2

*/ 


//CREDENTIALS FUNCTION TO BE CALLED IN SOAP HEADER
function makeHeaderSoapEncoder(){
    $ESBC = new ESBCredentialsEncoder_t;
$ESBC->ESBUsername = new SoapVar('testewebsapo@sapo.pt', XSD_STRING, NULL, NULL, null, 'http://services.sapo.pt/definitions');
$ESBC->ESBPassword = new SoapVar('teste1', XSD_STRING, NULL, NULL, null, 'http://services.sapo.pt/definitions');
return new SoapHeader('http://services.sapo.pt/definitions', 'ESBCredentials', $ESBC);
}

class ESBCredentialsEncoder_t {
    /* Type: string MinOcurs: 1 MaxOcurs: 1 */
    public $ESBUsername;
    /* Type: string MinOcurs: 1 MaxOcurs: 1 */
    public $ESBPassword;
}


//FUNCTION TO GET A TOKEN FROM BUS TROUGH HTTP POST, WITH INPUT VALUE RANDNAME
function get_token() {

$url = "https://services.sapo.pt/STS/GetToken?ESBUsername=testewebsapo@sapo.pt&ESBPassword=teste1&ESBTokenExtraInfo=".$Randname;
$xml = simplexml_load_file($url);
echo $xml[0];
}


//SOAP CLIENT, HEADER INITIALIZATION
$client = new SoapClient('http://services.sapo.pt/Metadata/Contract/Videos');
$client->__setSoapHeaders(array(makeHeaderSoapEncoder()));


//PARAMETERS ARRAY FOR USE IN METHOD ADDVIDEOPOST
$params = array('Video' => array('Subtitle' => 'testeteste',
							  'Synopse' => 'testetesteteste',
							  'Title' => 'testetestetesteteste',
							  'Active' => 1,
							  'Tags' => 'teste,tesdste1teste,teste,teste'),
			 'Email' => 'testewebsapo@sapo.pt');


//CREATION OF OBJECT OF TYPE ADDVIDEOPOST
$response = $client->__soapCall('AddVideoPost', array('parameters' => $params));

//INITIALIZE A VARIABLE WITH STRING VALUE RANDNAME
$Randname = $response->AddVideoPostResult->Randname;



?>


<!-- 

VIDEO UPLOAD FORM:

-->
  
<form action="http://upload01.videos.sapo.pt/upload_token.html" method="post" enctype="multipart/form-data">

<input type="file" name="content_file">

<input type="hidden" name="redir" value="http://videos.sapo.pt/testewebsapo">

<input type="hidden" name="token" value="<?php get_token() ?>">

<input type="submit">

</form>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Talvez seja importante mencionar que, ele cria o objecto video na plataforma,

porque acessando ao painel de controlo do sapo, e mesmo, apesar do erro

que ocorre, surge um thumbnaill com a indicação de um video em processamento.

Obrigado pela atenção!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá,

obrigado pela tua atenção!

Respondendo a tua questão:

$Randname = $response->AddVideoPostResult->Randname;

Retorna uma String

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas precisas de usar o global para poderes aceder a ela. Vê se fazendo isso já resolve. :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Vou tentar, já digo alguma coisa.

A utilização da Global, não seria só no caso dessa variavel

estar dentro de uma função ou coisa do género ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eish... que cena!

Resolveste-me a situação :)

Fogo, fiquei às voltas disto, desde Sexta ou Quinta, que cena :X

Obrigado irmão!

Já agora fica aqui a solução:

//FUNCTION TO GET A TOKEN FROM BUS TROUGH HTTP POST, WITH INPUT VALUE RANDNAME

function get_token($Randname) {

$url = "https://services.sapo.pt/STS/GetToken?ESBUsername=testewebsapo@sapo.pt&ESBPassword=teste1&ESBTokenExtraInfo=".$Randname;

$xml = simplexml_load_file($url);

echo $xml[0];

}

e portanto, no formulário:

<input type="hidden" name="token" value="<?php get_token($Randname) ?>">

A solução passou por resolver a questão do $Randname;

Logo, foi passada na função como parametro a receber, e assim, quando necessária

a função get_token, envias a variavel $Randname

yeh ;D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eheh, ainda bem que resolveu. :)

A utilização da Global, não seria só no caso dessa variavel

estar dentro de uma função ou coisa do género ?

O global usas para aceder a variáveis fora do scope actual. Neste caso, o scope da função get_token() não tens acesso à variável porque ela estava no scope principal por assim dizer. Ao fazeres global $Randname; dentro da função, passavas a ter também nesse scope a variável $Randname declarada no outro scope. :)
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora