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

heldrida

Webservices Sapo: AddVideoPost(), Invalid_token ?

Recommended Posts

heldrida

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>

Share this post


Link to post
Share on other sites
heldrida

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!

Share this post


Link to post
Share on other sites
heldrida

Olá,

obrigado pela tua atenção!

Respondendo a tua questão:

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

Retorna uma String

Share this post


Link to post
Share on other sites
djthyrax

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


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites
heldrida

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 ?

Share this post


Link to post
Share on other sites
heldrida

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

Share this post


Link to post
Share on other sites
djthyrax

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. :)

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.