• Publicidad

Acceso a MediaFire con Perl

¿Estás desarrollando un proyecto, o piensas hacerlo? Pon aquí tu propuesta, lo más seguro es que alguien esté interesado en ayudarte.

Acceso a MediaFire con Perl

Notapor n3td1srupt » 2012-12-31 05:52 @286

Hola a todos...
Antes que nada me presento: soy n3td1srupt, joven de 15 años pues interesado en programación y el mundo del hacking :) ...

Bueno, esta duda la he buscado por Internet y no he visto nada relacionado. He encontrado en esta web diferentes soluciones para integrar PHP y perl, pero no sé si esto es lo mismo...

Veréis: estoy diseñando o tengo en mente más bien, realizar un administrador de MediaFire desde la consola, es decir: subir archivos, gestionarlos, etc... todo ello a MediaFire desde la consola de Linux, así que lo primero que busqué fue el acceso a la API de MediaFire la cual se encuentra ya liberada: http://developers.mediafire.com/index.php/REST_API

Después busqué la integración de Perl con PHP, pero, ahora bien, mi duda viene de aquí:

Para ingresar a MediaFire desde mi script Perl usando la API de PHP de MediaFire, ¿cómo se visualizarán los datos?

Aún no he empezado a programarlo pero antes de llevarme el chasco me gustaría saber si debo saber algo demás para integrar la API y Perl en el mismo script, y dado que lo hago desde consola también me han venido dudas sobre la visualización de los datos una vez dentro de la cuenta de MediaFire...

Salu2 y Gracias.

¡¡¡Espero poder aportar también por aquí!!!
n3td1srupt
Perlero nuevo
Perlero nuevo
 
Mensajes: 16
Registrado: 2012-10-28 15:13 @675

Publicidad

Re: Acceder a una API de PHP mediante Perl

Notapor explorer » 2012-12-31 08:19 @388

Bienvenido a los foros de Perl en Español, n3td1srupt.

No necesitas para nada PHP... Una API consiste en una serie de llamadas que hace un cliente hacia un servidor, usando un protocolo más o menos estándar.

En tu caso, ese protocolo es el HTTPS, usando llamadas GET (la petición y los parámetros van todos juntos en la URL de la petición) o POST (la petición y datos van por la salida estándar hacia el servidor). Entonces, te están diciendo que no importa el lenguaje que vayas a usar en el lado del cliente, siempre y cuando hagas las peticiones de forma correcta. Y son simples llamadas HTTPS, así que eso se puede hacer con casi cualquier lenguaje.

En el caso de Perl, se podría resolver con los módulos LWP (con la extensión para HTTPS) y JSON (para interpretar las respuestas), pero no son los únicos.

Lo que sí debes investigar es cómo conseguir los 'application id' para poder usar la API... Yo, al menos, no sé de dónde se puede sacar.

A propósito... en CPAN no hay nada de esto, así que tienes una buena oportunidad para publicar una distribución de módulos que puede ser muy interesante para más gente.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Acceder a una API de PHP mediante Perl

Notapor n3td1srupt » 2012-12-31 10:24 @475

Muchas gracias, explorer...

Si mal no he entendido yo lo que realizaría sería identificarme en la misma petición que hago con la URL y ahí mismo decir la acción que solicito. ¿Correcto?

Es que el problema me derivaba en que antes supuestamente pues yo buscaba la API para entrar a MediaFire y pues no estaba publicada y leía que en tal caso no podría acceder ya que MediaFire no me dejaría...

En cuanto a la API entonces ¿no la necesito para construir el script?

Y de antemano, muchas gracias, explorer, y pues ya que me has sacado lo de construir un módulo para esto me has animado mucho, y fijo que lo construyo ;)

Salu2
n3td1srupt
Perlero nuevo
Perlero nuevo
 
Mensajes: 16
Registrado: 2012-10-28 15:13 @675

Re: Acceder a una API de PHP mediante Perl

Notapor explorer » 2012-12-31 16:50 @743

n3td1srupt escribiste:Si mal no he entendido yo lo que realizaría sería identificarme en la misma petición que hago con la URL y ahí mismo decir la acción que solicito. ¿Correcto?
En esa página no hay una descripción de los procedimientos, solo una descripción de la API, por lo que no sabemos los pasos que se deben dar, pero leyendo por encima parece que primero debes hacer una petición para obtener una clave de sesión, con get_session_token(), que utilizarás en el resto de llamadas de esa sesión. Y para poder hacer esa primera llamada necesitas saber el 'application id' que no tengo idea de dónde conseguirlo. Así que lo primero es leer toda la documentación posible y preguntar.

n3td1srupt escribiste:Es que el problema me derivaba en que antes supuestamente pues yo buscaba la API para entrar a MediaFire y pues no estaba publicada y leía que en tal caso no podría acceder ya que MediaFire no me dejaría...
Que una API sea pública no implica que se pueda usar. Por ejemplo, hay varias API que son públicas pero no se pueden usar salvo que consigas una clave de acceso, aparte del correspondiente nombre de usuario y contraseña.

n3td1srupt escribiste:En cuanto a la API entonces ¿no la necesito para construir el script?
La API te dice cómo construir las peticiones. El cómo hacerlas y mandarlas no implica un determinado lenguaje (al menos, con esta API. Hay otras que sí son específicas de un determinado sistema -Java, .Net, etc.-).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Acceder a una API de PHP mediante Perl

Notapor n3td1srupt » 2013-01-01 07:03 @335

Gracias, explorer, ya encontré lo del aplication id y la API key para la aplicación. La proporciona el mismo MediaFire cuando te has registrado; desde tu cuenta le indicas que vas a desarrollar una app y él te proporciona esos datos.

Bueno, yo empiezo ya a trastear código y si me surge alguna complicación difícil y no la resuelvo, la preguntaré e iré aportando los avances y tal, ¡a ver si logro armar el módulo!

Gracias y Salu2.
n3td1srupt
Perlero nuevo
Perlero nuevo
 
Mensajes: 16
Registrado: 2012-10-28 15:13 @675

Creación de un método POST

Notapor n3td1srupt » 2013-01-09 07:31 @354

Holaaaa.

Bueno, dado que estoy en clase no tengo mucho tiempo pero en unos minutos he hecho pruebas y tal y ahora me llega un problema que no consigo resolver... Veréis: si miráis este enlace, es la API de upload de MediaFire: http://developers.mediafire.com/index.p ... API#upload pero no entiendo lo de cómo pasar los parámetros. Dice de una construcción post pero no tengo ninguna idea de cómo hacer todo esto. Esto es lo que dice la API de upload:

Upload API upload URL: http://www.mediafire.com/api/upload/upload.php

Description : Upload a file through POST to the user's account. You can either use the session token to authenticate the user, or pass the dropbox key. This api returns the upload key when successful. You will have to pass this key to upload/poll_upload.php to get the Quickkey. Please refer to the documentation about the API upload/poll_upload for more details.

Required parameters
POST Data

The file content (Binary data).


Optional Parameters


GET Data

uploadkey : This is the folderkey of the target upload folder. If uploadkey is not passed, then the file will be uploaded to the root folder.

session_token : A Session Access Token to authenticate the user's current session. Required if not uploading to a dropbox.

dropbox : Set to '1' to enable dropbox mode. If enabled, the upload_key must be the dropbox type, which is an ecrypted string, not the normal 13 character folderkey.

Header Data

x-filename : File name you want to name the file on the system. If not passed, the original filename is used.

x-filesize : File size of the file.


El problema es ese: no sé cómo construir las peticiones para cargar un archivo. No entiendo la forma en la que se deba construir y he estado buscando información de cómo adjuntar un archivo mediante post en la URL pero no encuentro absolutamente nada...

Gracias.

Dentro de pronto a ver si publico ya el módulo, aunque pienso que volveré a preguntar respecto a la construcción de éste, es decir, de cómo construir el paquete :?: :) :)

¡¡¡Gracias!!!
n3td1srupt
Perlero nuevo
Perlero nuevo
 
Mensajes: 16
Registrado: 2012-10-28 15:13 @675

Re: Creación de un método POST

Notapor explorer » 2013-01-09 17:50 @785

En la página de manual de HTTP::Request::Common tienes un buen ejemplo de cómo hacerlo.

Sería algo así (no probado):

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use HTTP::Request::Common qw(POST);
  2.  
  3. my $ruta    = '/home/usuario';
  4. my $archivo = 'archivo_a_enviar.pdf';
  5.  
  6. my $ua = LWP::UserAgent->new;
  7. $ua->request(
  8.     POST "http://www.mediafire.com/api/upload/upload.php?session_token=$sesion",
  9.          x-filename => $archivo,
  10.          x-filesize => -s "$ruta/$archivo",                   # tamaño del archivo
  11.          Content    => [ File => [ "$ruta/$archivo" ] ],      # ruta al archivo
  12. );
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Se pueden usar otros módulos, pero lo básico está ahí. Está sacado de la página de manual de HTTP::Request::Common, pero tienes más información en lwpcook.

($sesion guarda el session_token obtenido durante la sesión. De la misma manera se puede indicar el id de la carpeta donde dejar el archivo).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Creación de un método POST

Notapor n3td1srupt » 2013-01-14 09:56 @456

Muchas gracias, explorer, pero lamentablemente no funciona...

Me he leído la información de HTTP::Request::Common y veo que para enviar archivos es lo que tu me has enseñado pero obtengo un error de este tipo

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. Input the FILE PATH you want to upload
  2. '/home/n3td1srupt/Escritorio/hola'
  3. Can't open file '/home/n3td1srupt/Escritorio/hola'
  4. : No existe el fichero o el directorio at /home/n3td1srupt/mediafire-test2.pl line 84
  5.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


El archivo 'hola' que está en el escritorio pero supuestamente no existe y no logra subir absolutamente nada y siempre devuelve ese error.
n3td1srupt
Perlero nuevo
Perlero nuevo
 
Mensajes: 16
Registrado: 2012-10-28 15:13 @675

Re: Creación de un método POST

Notapor explorer » 2013-01-14 15:48 @700

Si Perl dice que no puede acceder a '/home/n3td1srupt/Escritorio/hola', es o porque no existe o porque no tiene los permisos necesarios para acceder a ese archivo.

Desde la línea de comandos, ejecuta el comando

ls -l /home/n3td1srupt/Escritorio/hola

para probar si existe o no.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Problema con el futuro script/módulo MediaFire

Notapor n3td1srupt » 2013-01-16 09:44 @447

Holaaaa

Bueno, después de mantener el código en secreto xD no he podido más por que este no funciona. El problema se causa en el upload de archivos a MediaFire el cual definitivamente no consigo realizar. También existe un problema muy grave con SHA1 obligándome así a tener que pedirle al usuario calcular el SHA1 de la firma porque la salida del SHA1 proporcionado por Digest::SHA1 no es comprensible para realizar la petición.

Para calcular manualmente el SHA1:

Si ejecutáis el programa debéis introducir un SHA1. Ese SHA1 para construirlo tendréis que ir por el momento a un enlace externo: http://www.sha1-online.com/ y desde ahí colocar vuestro correo (de cuenta de MediaFire), contraseña, api_key, y application_id, sin espacios -juntos- y generar el sha1. La api_key y app_id están en el código, pero por si acaso, aquí están:

api key=32063
app_id=5606dudsfa60xy0f7p60oac7b31tpi8bethde701

Así pues para generar el sha1 sería algo así:

[email protected]ñaelnumerodelaapikeyelnumerodelaappid

Sin embargo, el problema más grave viene a ser en el upload de archivos ya que no consigo que suba el archivo.

Este es el código actual que tengo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #Fist test version of perl to access into our MediaFire accounts.
  2. #by n3td1srupt
  3. #Twitter-->@n3td1srupt
  4.  
  5. use Data::Dumper;
  6. use XML::Simple;
  7. use HTTP::Request::Common qw(POST);
  8. use LWP::Simple;
  9. use LWP::UserAgent;
  10. use Crypt::SSLeay;
  11.  
  12.  
  13. #URLS TO ACCESS TO SOME FUNCTIONS INTO THE API OF MEDIAFIRE
  14. #######################################################################################
  15.  
  16. @url_session_token=qw(https://www.mediafire.com/api/user/get_session_token.php? email= email &password= pass &application_id= app_id &signature= signature);
  17. @url_login_token=qw(https://www.mediafire.com/api/user/get_login_token.php? email= email &password= pass &application_id= app_id &signature= signature);
  18. $url_login=' http://www.mediafire.com/api/user/login_with_token.php?login_token=';
  19.  
  20. ########################################################################################
  21.  
  22.  
  23. #MEDIAFIRE ACCOUNT DATA PROVIDED BY USER
  24. ###################################################
  25.  
  26. print "Email of your MediaFire account\n";
  27. $email=<STDIN>;
  28. chop $email;
  29. print "Input your password\n";
  30. $pass=<STDIN>;
  31. chop $pass;
  32. print "Input the SHA1 signature\n";
  33. $signature=<STDIN>;
  34.  
  35. ###################################################
  36.  
  37. #KEYS AND SIGNATURES(SHA1 YET NOT IMPLEMENTED IN THE SCRIPT) REQUESTED BY THE API
  38. ###############################################################
  39. $app_id='32063';
  40. $api_key='5606dudsfa60xy0f7p60oac7b31tpi8bethde701';
  41. ###############################################################
  42.  
  43.  
  44. #SOME HTTP REQUESTS AND RESPONSES TO MANIPULATE MEDIAFIRE ACCOUNT
  45. #####################################################################################################
  46. #SESSION TOKEN
  47.  
  48.  
  49. $url_session_token[2]=$email;
  50. $url_session_token[4]=$pass;
  51. $url_session_token[6]=$app_id;
  52. $url_session_token[8]=$signature;
  53. $construct_url_session_token=join("",@url_session_token);
  54. print "$construct_url_session_token";
  55. $request_xml_session_token=getstore("$construct_url_session_token",'mediafire-response.xml');
  56. print $request_xml_session_token;
  57. $xml_session_token=new XML::Simple;
  58. $get_xml_session_token=$xml_session_token->XMLin('mediafire-response.xml');
  59. $session_token="$get_xml_session_token->{session_token}";
  60.  
  61.  
  62. ######################################################################################################
  63.  
  64. #LOGIN TOKEN
  65. ######################################################################################################
  66. $url_login_token[2]=$email;
  67. $url_login_token[4]=$pass;
  68. $url_login_token[6]=$app_id;
  69. $url_login_token[8]=$signature;
  70. $construct_url_login_token=join("",@url_login_token);
  71. $request_xml_login_token=getstore("$construct_url_login_token",'mediafire-response2.xml');
  72. $xml_login_token=new XML::Simple;
  73. $get_xml_login_token=$xml_login_token->XMLin("mediafire-response2.xml");
  74. $login_token="$get_xml_login_token->{login_token}";
  75.  
  76. #MEDIAFIRE LOGIN
  77. #################################################
  78. $mediafire_login="$url_login$login_token";
  79.  
  80. #MEDIAFIRE UPLOAD FILE
  81. print "Input the name of the file\n";
  82. $mediafire_upload_file_name=<STDIN>;
  83. print "Input the FILE PATH you want to upload\n";
  84. $mediafire_file_upload=<STDIN>;
  85. $mediafire_file_upload_send=LWP::UserAgent->new;
  86. $mediafire_file_upload_send->request(
  87. POST "http://www.mediafire.com/api/upload/upload.php?",
  88.  
  89. x-filename=>"$mediafire_upload_file_name",
  90. x-filesize=> -s "$mediafire_file_upload",
  91. Content=> [ File => ["$mediafire_file_upload"] ],
  92.  
  93. );
  94.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Este es otra variante a este mismo (solo cambian las últimas líneas)

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #Fist test version of perl to access into our MediaFire accounts.
  2. #by n3td1srupt
  3. #Twitter-->@n3td1srupt
  4.  
  5. use Data::Dumper;
  6. use XML::Simple;
  7. use HTTP::Request::Common qw(POST);
  8. use LWP::Simple;
  9. use LWP::UserAgent;
  10. use Crypt::SSLeay;
  11. use Digest::SHA1 qw(sha1 sha1_hex sha1_base64 sha1_transform);
  12.  
  13. #URLS TO ACCESS TO SOME FUNCTIONS INTO THE API OF MEDIAFIRE
  14. #######################################################################################
  15.  
  16. @url_session_token=qw(https://www.mediafire.com/api/user/get_session_token.php? email= email &password= pass &application_id= app_id &signature= signature);
  17. @url_login_token=qw(https://www.mediafire.com/api/user/get_login_token.php? email= email &password= pass &application_id= app_id &signature= signature);
  18. $url_login=' http://www.mediafire.com/api/user/login_with_token.php?login_token=';
  19.  
  20. ########################################################################################
  21.  
  22.  
  23. #MEDIAFIRE ACCOUNT DATA PROVIDED BY USER
  24. ###################################################
  25.  
  26. print "Email of your MediaFire account\n";
  27. $email=<STDIN>;
  28. chop $email;
  29. print "Input your password\n";
  30. $pass=<STDIN>;
  31. chop $pass;
  32. print "Input the SHA1 signature\n";
  33. $signature=<STDIN>;
  34.  
  35. ###################################################
  36.  
  37. #KEYS AND SIGNATURES(SHA1 YET NOT IMPLEMENTED IN THE SCRIPT) REQUESTED BY THE API
  38. ###############################################################
  39. $app_id='32063';
  40. $api_key='5606dudsfa60xy0f7p60oac7b31tpi8bethde701';
  41. ###############################################################
  42.  
  43.  
  44. #SOME HTTP REQUESTS AND RESPONSES TO MANIPULATE MEDIAFIRE ACCOUNT
  45. #####################################################################################################
  46. #SESSION TOKEN
  47.  
  48.  
  49. $url_session_token[2]=$email;
  50. $url_session_token[4]=$pass;
  51. $url_session_token[6]=$app_id;
  52. $url_session_token[8]=$signature;
  53. $construct_url_session_token=join("",@url_session_token);
  54. print "$construct_url_session_token";
  55. $request_xml_session_token=getstore("$construct_url_session_token",'mediafire-response.xml');
  56. print $request_xml_session_token;
  57. $xml_session_token=new XML::Simple;
  58. $get_xml_session_token=$xml_session_token->XMLin('mediafire-response.xml');
  59. $session_token="$get_xml_session_token->{session_token}";
  60.  
  61.  
  62. ######################################################################################################
  63.  
  64. #LOGIN TOKEN
  65. ######################################################################################################
  66. $url_login_token[2]=$email;
  67. $url_login_token[4]=$pass;
  68. $url_login_token[6]=$app_id;
  69. $url_login_token[8]=$signature;
  70. $construct_url_login_token=join("",@url_login_token);
  71. $request_xml_login_token=getstore("$construct_url_login_token",'mediafire-response2.xml');
  72. $xml_login_token=new XML::Simple;
  73. $get_xml_login_token=$xml_login_token->XMLin("mediafire-response2.xml");
  74. $login_token="$get_xml_login_token->{login_token}";
  75.  
  76. #MEDIAFIRE LOGIN
  77. #################################################
  78. $mediafire_login="$url_login$login_token";
  79.  
  80. #MEDIAFIRE UPLOAD FILE
  81. print "Input the FILE PATH you want to upload\n";
  82. $mediafire_file_upload=<STDIN>;
  83. chop $mediafire_file_upload;
  84. $mediafire_file_upload_send=LWP::UserAgent->new;
  85. $mediafire_file_upload_send->request(
  86. POST 'http://www.mediafire.com/api/upload/upload.php?',
  87. Content_Type=>'form-data',
  88. Content=>
  89. [ undef,$mediafire_file_upload,'x-filename'=>$mediafire_file_upload],
  90.  
  91. );
  92.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


¿Qué opináis?

Muchas Gracias y Salu2
n3td1srupt
Perlero nuevo
Perlero nuevo
 
Mensajes: 16
Registrado: 2012-10-28 15:13 @675

Siguiente

Volver a Proyectos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados

cron