Foros del Web » Programación para mayores de 30 ;) » Programación General »

Migrar .sh a otro lenguaje <- HELP

Estas en el tema de Migrar .sh a otro lenguaje <- HELP en el foro de Programación General en Foros del Web. Buenas, tengo un .sh de linux, y lo quisiera mirar a otro lenguaje para poder crear un .exe La verdad que no intiendo un poco ...
  #1 (permalink)  
Antiguo 21/02/2010, 08:54
Avatar de culd  
Fecha de Ingreso: noviembre-2003
Mensajes: 959
Antigüedad: 21 años
Puntos: 19
Migrar .sh a otro lenguaje <- HELP

Buenas, tengo un .sh de linux, y lo quisiera mirar a otro lenguaje para poder crear un .exe

La verdad que no intiendo un poco de secuencial shell en linux, lo que necesito es poder subir archivos a megaupload.

Código:
#!/bin/bash
#
# Upload a file to megaupload (anonymously or using a registered account).
# Output URL for the uploaded file.
#
# Dependencies: curl
#
# Web: http://code.google.com/p/megaupload-dl
# Contact: Arnau Sanchez <[email protected]>.
#
# License: GNU GPL v3.0: http://www.gnu.org/licenses/gpl-3.0-standalone.html
#
set -e

AGENT="Mozilla Firefox / 3.01"

# Echo text to standard error.
#
debug() { echo "$@" >&2; }

curl() {
  while true; do
      $(type -P curl) "$@" && DRETVAL=0 || DRETVAL=$?
      if [ $DRETVAL -eq 6 -o $DRETVAL -eq 7 ]; then
          debug "curl failed with retcode $DRETVAL, trying again"
          continue
      else
          return $DRETVAL
      fi
  done
}

# Get first line that matches a regular expression and extract string from it.
#
# $1: POSIX-regexp to filter (get only the first matching line).
# $2: POSIX-regexp to match (use parentheses) on the matched line.
#
parse() { sed -n "/$1/ s/^.*$2.*$/\1/p" | head -n1; }

# Login to megaupload and return cookies
#
# $1/$2: User/password
login() {
    USER=$1
    PASSWORD=$2
    LOGINURL="http://www.megaupload.com"
    
    if test "$USER" -a "$PASSWORD"; then
        debug "starting login process: $USER/$(sed 's/./*/g' <<< "$PASSWORD")"
        COOKIES=$(curl -A "$AGENT" -o /dev/null -c - \
            -d "username=$USER&password=$PASSWORD&login=1&redir=1" $LOGINURL)
        test "$COOKIES" || { debug "login error"; return 2; }
        debug "using cookies: $COOKIES"
        echo "$COOKIES"
    else 
        debug "no login info: anonymous upload"
    fi
}

# Upload a file to megaupload
#
# $1: File path
# $2: Description
# $3: Cookies contents (optional)
#
upload_file() {
    FILE=$1
    DESCRIPTION=$2    
    COOKIES=$3        
    UPLOADURL="http://www.megaupload.com"
        
    debug "downloading upload page: $UPLOADURL"
    DONE=$(curl "$UPLOADURL" | parse "upload_done.php" 'action="\([^\"]*\)"')
    test "$DONE" || { debug "can't get upload_done page"; return 2; }    
    UPLOAD_IDENTIFIER=$(parse "IDENTIFIER" "IDENTIFIER=\([0-9.]\+\)" <<< $DONE)
    debug "starting file upload: $DONE"
    curl -A "$AGENT" \
        -b <(echo "$COOKIES") \
        -F "UPLOAD_IDENTIFIER=$UPLOAD_IDENTIFIER" \
        -F "sessionid=$UPLOAD_IDENTIFIER" \
        -F "file=@$FILE;filename=$(basename "$FILE")" \
        -F "message=$DESCRIPTION" \
        "$DONE" | parse "downloadurl" "url = '\(.*\)';"        
}

# Main

if test $# -lt 2 -o $# -gt 3; then
    debug "Upload a file to megaupload (anonymously or using an account)."
    debug
    debug "Usage: $(basename $0) FILE DESCRIPTION [USER:PASSWORD]"
    exit 1
fi

FILE=$1
DESCRIPTION=$2
USERINFO=$3

IFS=":" read USER PASSWORD <<< "$USERINFO"
COOKIES=$(login "$USER" "$PASSWORD")
upload_file "$FILE" "$DESCRIPTION" "$COOKIES"
  #2 (permalink)  
Antiguo 22/02/2010, 09:43
Avatar de genuine_carlosV2  
Fecha de Ingreso: noviembre-2008
Ubicación: 127.0.0.1
Mensajes: 296
Antigüedad: 16 años
Puntos: 6
Respuesta: Migrar .sh a otro lenguaje <- HELP

Buenas,

Que problema hay con el script? No funciona?
Has analizado el script que das? Donde te atascas?
Sabes usar el programa 'man' de GNU/Linux?
Para que quieres crear un exe? No querrás crear un ejecutable?
Para que plataforma lo quieres crear? Quieres que sea portable?
A que lenguaje lo quieres traducir? No hay ya una aplicación que lo hace?
No se pueden subir archivos a megaupload mediante su web? No tienen en la web una aplicación?
Que conocimientos tienes en que lenguaje? Donde te atascas al empezar a programarlo?
Que herramientas usas para empezar a programarlo?
Has buscado algún tutorial sobre shell script?

Responde a algunas de las preguntas para que te puedan ayudar.

Saludos
__________________
Carlos

Recoger datos es solo el primer paso hacia la sabiduría. Pero compartir información es el primer paso hacia la comunidad. - IBM
  #3 (permalink)  
Antiguo 22/02/2010, 10:39
Avatar de culd  
Fecha de Ingreso: noviembre-2003
Mensajes: 959
Antigüedad: 21 años
Puntos: 19
Respuesta: Migrar .sh a otro lenguaje <- HELP

Cita:
Iniciado por genuine_carlosV2 Ver Mensaje
Que problema hay con el script? No funciona?
Realmente no lo probe, no tengo a mano instalada una maquina con linux para probarlo, pero tendria que funcionar correctamente

Cita:
Iniciado por genuine_carlosV2 Ver Mensaje
Has analizado el script que das? Donde te atascas?
No conozco de lleno el funcionamiento de "curl"...
Tampoco conozco el manejo de variables en SHELL, como para identificar todo con lectura corrida.

Cita:
Iniciado por genuine_carlosV2 Ver Mensaje
Sabes usar el programa 'man' de GNU/Linux?
No la verdad que no, no soy muy amante de linux. Si bien por ahi me salta la termica y lo instalo y lo uso un tiempito pero estoy enamorado de windows todavia.

Cita:
Iniciado por genuine_carlosV2 Ver Mensaje
Para que quieres crear un exe? No querrás crear un ejecutable?
Claro, te explico tengo una aplicacion y quiero agregarle la funcion de subir archivos a servidor via HTTP, como encontre este script para megaupoad y de echo megaupload es un gran host pinto la idea de adaptar este script a mi aplicacion.

Cita:
Iniciado por genuine_carlosV2 Ver Mensaje
Para que plataforma lo quieres crear? Quieres que sea portable?
Para All Windows, si es portable o no lo es, realmente no importa ya que mi aplicacion es solo para windows, ya que mi aplicacion trabaja sobre un juego muy popular que tambien es solo para windows.

Cita:
Iniciado por genuine_carlosV2 Ver Mensaje
A que lenguaje lo quieres traducir? No hay ya una aplicación que lo hace?
Yo lo quiero traducir a VB, si bien no es lo mismo por que curl ya tiene en si todo el protocolo HTTP, para mandar las cabezeras, cookies, etc... Yo tendria que utilizar winsock y simular el funcionamiento de curl o de algun navegador, pero para ello debe entender el funcionamiento de curl en conjunto con este script... Es decir cual es la idea general del script y en que ayuda curl.
Pero no me molestaria que la aplicacion este en C, C++, etc... Ya que de ahi migrar a vb para mi es mas facil y entendible.

Cita:
Iniciado por genuine_carlosV2 Ver Mensaje
No se pueden subir archivos a megaupload mediante su web? No tienen en la web una aplicación?
Claro que se puede subir, el tema es que lo haga automaticamente y que el usuario no requiera conocimientos previos.

Cita:
Iniciado por genuine_carlosV2 Ver Mensaje
Que conocimientos tienes en que lenguaje? Donde te atascas al empezar a programarlo?
Soy programador senior de vb, donde me atasco, por ejemplo en esta linea

Código:
    curl -A "$AGENT" \
        -b <(echo "$COOKIES") \
        -F "UPLOAD_IDENTIFIER=$UPLOAD_IDENTIFIER" \
        -F "sessionid=$UPLOAD_IDENTIFIER" \
        -F "file=@$FILE;filename=$(basename "$FILE")" \
        -F "message=$DESCRIPTION" \
        "$DONE" | parse "downloadurl" "url = '\(.*\)';"
Por lo visto se ejecuta curl con los parametros necesarios como para subir el archivo, y al final guarda la direccion web del archivo subido. Esto es muy sensillo viendolo desde el lado de script, el tema es como interactuea curl para conectarse enviar y recibir.

Cita:
Iniciado por genuine_carlosV2 Ver Mensaje
Que herramientas usas para empezar a programarlo?
Insisto, no importa la herramiento, yo lo llevaria luego a vb con winsock
  #4 (permalink)  
Antiguo 22/02/2010, 10:55
Avatar de culd  
Fecha de Ingreso: noviembre-2003
Mensajes: 959
Antigüedad: 21 años
Puntos: 19
Respuesta: Migrar .sh a otro lenguaje <- HELP

Ahi descargue CURL para windows, me parece que voy a solucionar mas rapido si dejo que curl haga todo el trabajo de protocolo enviandole solamente los parametros... A ver si entiendo los parametros que envia el script...

Código:
    curl -A "$AGENT" \
La variable AGENT, tiene asignado el siguiente valor: "Mozilla Firefox / 3.01"


Código:
         -b <(echo "$COOKIES") \
Cookies tiene asignado el valor que le llego en el tercer lugar en los parametros del script:


COOKIES=$(login "$USER" "$PASSWORD")

Pero como quiero cargar en una cuenta free, no lo tengo en cuenta, tendria que quedar vavio...


Código:
         -F "UPLOAD_IDENTIFIER=$UPLOAD_IDENTIFIER" \
El valor de $UPLOAD_IDENTIFIER proviene de la siguiente linea

UPLOAD_IDENTIFIER=$(parse "IDENTIFIER" "IDENTIFIER=\([0-9.]\+\)" <<< $DONE)

Realmente no la entiendo...


Código:
         -F "sessionid=$UPLOAD_IDENTIFIER" \
Nuevamente


Código:
         -F "file=@$FILE;filename=$(basename "$FILE")" \
$FILE contendria la ruta del archivo a subir (que se le envio por parametros al script)


Código:
         -F "message=$DESCRIPTION" \
La descripcion del archivo a subir (tambien se le envio por parametro)


Código:
         "$DONE" | parse "downloadurl" "url = '\(.*\)';"
Por ultimo, esta linea me parece que guarda en la variable el valor de "downloadurl" que seguramente contiene la direccion web de descarga del archivo subido.


*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

En fin, solo necesito entender bien los parametros que le tengo que enviar a CURL para que el suba el archivo y me devuelva la direccion web del archivo
  #5 (permalink)  
Antiguo 22/02/2010, 11:10
Avatar de genuine_carlosV2  
Fecha de Ingreso: noviembre-2008
Ubicación: 127.0.0.1
Mensajes: 296
Antigüedad: 16 años
Puntos: 6
Respuesta: Migrar .sh a otro lenguaje <- HELP

Buenas,

Ahora con más información, se te puede empezar a aconsejar.

En visual basic, con winsock, sólo puedes establecer conexiones, para que te hagas una idea de lo que quieres, estos serían los pasos:
1) Establecer la conexión mediante winsock
2) Seguramente, implementar el protocolo SSL para poder realizar las conexiones seguras (esto implica creación y mantenimiento de certificados, implementación de cifrados de clave pública (RSA, ElGamal, etc), implementación de cifrados de clave privada (DES, AES, etc)
3) Implementar el protocolo HTTP para poder conectar con el servidor web y saber interpretar las respuestas
4) Saber como quiere megaupload los datos
5) Enviarselos

Hace tiempo que no programo con VBasic y, seguramente, todo esto será hoy en día mucho más fácil pero creo que, aún y así, es una matada innecesaria (ya no te digo si lo quieres hacer en C/C++) ya que cURL es un librería que ya implementa todo esto.

Lo que yo haría:
Instalaría la librería cURL (puede ser una dependencia de tu programa si lo quieres ver de este modo) y lo usaría mediante una llamada al sistema (es decir, como si ejecutases un comando de MS-Dos desde VBasic (seguramente, le podrás pasar los mismos parámetros y de la misma manera que se hace en el shell script).

Si tu lenguaje final va a ser VBasic, la traducción (usando lo que te decía antes) podrá ser casi literal (ya que VBasic es un lenguaje de muy alto nivel). Sólo debes tener en cuenta que las variables en shell scripting se escriben con un dolar ($) delante, es decir: $hola <- Es una variable.
Se declaran así:
hola="adios" <- Esto es un string
numero=45 <- Esto es un número

Y luego, para usarse, se debe poner el dolar delante:
echo $hola <- Imprime el contenido de la variable 'hola'
echo $numero <- Imprime el contenido de la variable 'numero'

Te aconsejo que cojas un tutorial de shell scripting en bash, una distribución de GNU/Linux y tiempo y empieces a mirarte como se crean los scrips para saber como funciona este. También te recomiendo que uses el comando 'man' (desde un GNU/Linux, claro) para descubrir como funciona un comando (un shell script no es más que un listado de comandos ordenados), por ejemplo: man ls <- Te dará información sobre el comando ls

En fin, cualquier duda puntual, ya sabes.

EDITO: Acabo de ver tu segundo mensaje. Ahora no puedo responderte (no tengo más tiempo). Miraré a ver si puedo esta noche o mañana. Consejo, usa man!!

Saludos y suerte
__________________
Carlos

Recoger datos es solo el primer paso hacia la sabiduría. Pero compartir información es el primer paso hacia la comunidad. - IBM
  #6 (permalink)  
Antiguo 22/02/2010, 11:13
Avatar de culd  
Fecha de Ingreso: noviembre-2003
Mensajes: 959
Antigüedad: 21 años
Puntos: 19
Respuesta: Migrar .sh a otro lenguaje <- HELP

Aca tengo otro script para subir a megaupload, mas corto y aparentemente mas sensillo...

Código:
#!/bin/bash
pag=`curl -s http://www.megaupload.com | grep '<FORM' | cut -f8 -d\"`
url=`echo $pag | cut -f1 -d?`
id=`echo $pag | cut -f2 -d? | cut -f2 -d=`
#user= para que los archivos quedan en su cuenta lo pueden obtener usando wireshark y subiendo un archivo desde la pagina mismo
#despues al valor lo agregan despues del message asi: -F user='loquesea'
#message pueden poner lo que se les ocurra
#el 13 no se porque es pero va siempre y los demas valores los obtiene en el curl anterior para saber el server y la id del upload
#para los que no se den cuenta o no saben lo siguiente es una sola linea fijenese en las comillas `
download=`curl -s -A 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)' -F file=@$1 -F message='bashupload' -L $url?"UPLOAD_IDENTIFIER=$id&sessionid=$id&s=13"`
echo $download | cut -f6 -d\'
Justamente, esa fue la idea de mi ultimo mensaje (anterior a este)... Voy usar curl para no complicarme y ejecutarlo con los parametros correspondientes. O de ultima crear un batch que ejecute curl y que guarde en un txt el link de descarga y lo proceso despues con vb....
  #7 (permalink)  
Antiguo 23/02/2010, 02:28
Avatar de genuine_carlosV2  
Fecha de Ingreso: noviembre-2008
Ubicación: 127.0.0.1
Mensajes: 296
Antigüedad: 16 años
Puntos: 6
Respuesta: Migrar .sh a otro lenguaje <- HELP

Buenas,

Has probado de usar esas lineas con tu MS-Dos?
Ten en cuenta que la barra vertical (|) es una tubería, es decir, enlaza la salida de un comando con la entrada de otro. Aunque no debes preocuparte por las tuberías. Tu prueba a ejecutar los comandos (separándolos por las barras verticales) de cURL en tu PC. No pruebes a ejecutar comandos como cut o grep ya que estos no los trae MS-Dos pero los puedes implementar tu fácilmente con VBasic.

Saludos
__________________
Carlos

Recoger datos es solo el primer paso hacia la sabiduría. Pero compartir información es el primer paso hacia la comunidad. - IBM
  #8 (permalink)  
Antiguo 23/02/2010, 07:40
Avatar de culd  
Fecha de Ingreso: noviembre-2003
Mensajes: 959
Antigüedad: 21 años
Puntos: 19
Respuesta: Migrar .sh a otro lenguaje <- HELP

Cita:
Iniciado por genuine_carlosV2 Ver Mensaje
Buenas,

Has probado de usar esas lineas con tu MS-Dos?
Ten en cuenta que la barra vertical (|) es una tubería, es decir, enlaza la salida de un comando con la entrada de otro. Aunque no debes preocuparte por las tuberías. Tu prueba a ejecutar los comandos (separándolos por las barras verticales) de cURL en tu PC. No pruebes a ejecutar comandos como cut o grep ya que estos no los trae MS-Dos pero los puedes implementar tu fácilmente con VBasic.

Saludos
Efectivamente, ayer me puse a mirar un manual de SHELL, y busque las alternativas de cut, grep, etc para batch... Y lo hise funcionar, y ya entendi como trabajaba era muy facil
  #9 (permalink)  
Antiguo 23/02/2010, 08:51
Avatar de genuine_carlosV2  
Fecha de Ingreso: noviembre-2008
Ubicación: 127.0.0.1
Mensajes: 296
Antigüedad: 16 años
Puntos: 6
Respuesta: Migrar .sh a otro lenguaje <- HELP

Enhorabuena

Celebro que aprendieses de todo esto

Un saludo
__________________
Carlos

Recoger datos es solo el primer paso hacia la sabiduría. Pero compartir información es el primer paso hacia la comunidad. - IBM

Etiquetas: lenguaje, migrar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:25.