Enviar invitación de amigo en YouTube

Iniciado por aaronduran2, 25 Enero 2009, 22:53 PM

0 Miembros y 1 Visitante están viendo este tema.

aaronduran2

Hola. Estoy creando un programa para enviar invitaciones de amigo a usuarios de YouTube en VB 6. Conseguí obtener la lista de usuarios a partir de la página que estás viendo, pero no soy capaz de automatizar el proceso de envío de la invitación. Estuve viendo el código fuente, pero no encuentro nada. Tenía pensado crearlo en HTML.

¿Alguien sabe como se puede conseguir?

Encontré esto, pero como no soy de programación web, no se como tratarlo.

Código (html4strict) [Seleccionar]
<form name="friending" method="post" action="/profile?user=NOMBREUSUARIO">
<div class="smallText">
<input type="hidden" value="invite_user" name="action_friending">
<a id="aProfileAddFriend" href="#" onclick="document.friending.submit(); return false;"><img src="http://s.ytimg.com/yt/img/pixel-vfl73.gif" id="profileAddFriend" class="icnProperties" alt="Añadir como amigo">Añadir como amigo</a>
</div>
</form>


Gracias de antemano.

(Esto mismo lo publiqué en el foro de programación web, pero como trabajo con VB, pues también lo pongo aquí.)

el_c0c0

Cita de: aaronduran2 en 25 Enero 2009, 22:53 PM
Hola. Estoy creando un programa para enviar invitaciones de amigo a usuarios de YouTube en VB 6. Conseguí obtener la lista de usuarios a partir de la página que estás viendo, pero no soy capaz de automatizar el proceso de envío de la invitación. Estuve viendo el código fuente, pero no encuentro nada. Tenía pensado crearlo en HTML.

¿Alguien sabe como se puede conseguir?

Encontré esto, pero como no soy de programación web, no se como tratarlo.

Código (html4strict) [Seleccionar]
<form name="friending" method="post" action="/profile?user=NOMBREUSUARIO">
<div class="smallText">
<input type="hidden" value="invite_user" name="action_friending">
<a id="aProfileAddFriend" href="#" onclick="document.friending.submit(); return false;"><img src="http://s.ytimg.com/yt/img/pixel-vfl73.gif" id="profileAddFriend" class="icnProperties" alt="Añadir como amigo">Añadir como amigo</a>
</div>
</form>


Gracias de antemano.

(Esto mismo lo publiqué en el foro de programación web, pero como trabajo con VB, pues también lo pongo aquí.)


Podes hacerlo de 2 formas: via socket o via objeto XMLHTTP.

te dejo una idea de como es:
para la forma via socket haces asi

Código (vb) [Seleccionar]

    strParams = "action_friending=invite_user"
    strFormH = "POST /profile?user=" & strUSER & " HTTP/1.1\n"
    strFormH = strFormH & "Host: es.youtube.com\n"
    strFormH = strFormH & "User-Agent: Mozilla/5.0 (Windows NT 5.1;)\n"
    strFormH = strFormH & "Accept-Language: es-ar,es;q=0.8,en-us;q=0.5,en;q=0.3\n"
    strFormH = strFormH & "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\n"
    strFormH = strFormH & "Connection: close\n"
    strFormH = strFormH & "Referer: http://es.youtube.com/" & strRef & "\n"
    strFormH = strFormH & "Cookie: " & strCookie & ";\n"
    strFormH = strFormH & "Content-Type: application/x-www-form-urlencoded\n"
    strFormH = strFormH & "Content-Length: " & Len(strParams) & "\n\n"
    strFormH = strFormH & strParams & "\n\n"
    strFormH = Replace(strFormH, "\n", vbCrLf)

    objSocket.Connect "es.youtube.com", 80
    WaitTilSock2 7
    objSocket.SendData strFormH
    WaitTilSock2 8
    objSocket.CloseSck


Para eso vas a requerir tener un objeto CSockMaster llamado objSocket. Tene en cuenta que necesitas saber el cookie del login (eso puede ser jodido) y la pagina web de donde estas actualmente para usar de referente!. Ademas necesitas esta porcion de codigo (sirve para bloquear la ejecucion del codigo, pero sin que no responda la aplicacion):

Código (vb) [Seleccionar]
Public Declare Function WaitMessage Lib "user32" () As Long

Public Sub WaitTilSock2(lngStateF As Long)
    If objSocket.State = lngStateF Then Exit Sub
    Do While Not (objSocket.State = lngStateF)
        WaitMessage
        DoEvents
    Loop
End Sub



y via objeto XMLHTTP no te sabria decir, pero es mas o menos lo mismo.


Saludos!
'-     coco
"Te voy a romper el orto"- Las hemorroides

aaronduran2

#2
Muchísimas gracias, lo probaré e intentaré hacerlo.

EDITO:

CitarstrFormH = strFormH & "Referer: http://es.youtube.com/" & strRef & "\n"

La variable "strRef", ¿para qué se utiliza?

Y lo de la cookie, ¿sirve si ya estoy logueado en YouTube con Firefox? Conseguí obtener acceso a la cuenta desde un WebBrowser que hay en el formulario.

Saludos y perdón por las molestias.

Saludos  ;)

el_c0c0

Cita de: aaronduran2 en 26 Enero 2009, 12:01 PM
Muchísimas gracias, lo probaré e intentaré hacerlo.

EDITO:

CitarstrFormH = strFormH & "Referer: http://es.youtube.com/" & strRef & "\n"

La variable "strRef", ¿para qué se utiliza?

Y lo de la cookie, ¿sirve si ya estoy logueado en YouTube con Firefox? Conseguí obtener acceso a la cuenta desde un WebBrowser que hay en el formulario.

Saludos y perdón por las molestias.

Saludos  ;)

en el strRef metes la pagina en la que estas, POR LAS DUDAS, nose si hace falta... pero metelo
y las cookies de los exploradores NO sirven, tenes que hacer alguna funcion para que te devuelva la COOKIE logueandote desde tu programa!
esto pasa porque no usa nada de los objetos del sistema, esto es DIRECTO!

saludos
'-     coco
"Te voy a romper el orto"- Las hemorroides

aaronduran2

#4
Vale, gracias. Intentaré lo de las cookies.

EDITO: encontré este código para leer o establecer una cookie.

Código (vb) [Seleccionar]
Public Declare Function InternetSetCookie Lib "wininet.dll" Alias "InternetSetCookieA" _
        (ByVal lpszUrlName As String, _
        ByVal lpszCookieName As String, _
        ByVal lpszCookieData As String) As Boolean

Public Declare Function InternetGetCookie Lib "wininet.dll" _
        Alias "InternetGetCookieA" _
        (ByVal lpszUrlName As String, _
        ByVal lpszCookieName As String, _
        ByVal lpszCookieData As String, _
        lpdwSize As Long) As Boolean


Public Function SetCookie(ByVal UrlName As String, ByVal CookieName As String, ByVal CookieData As String)
  Dim blnReturn As Boolean

  blnReturn = InternetSetCookie(UrlName, CookieName, CookieData)

  If blnReturn = False Then MsgBox "Make Cookie Operation Failed!", vbCritical
End Function

Public Function GetCookie(ByVal UrlName As String, ByVal CookieName As String) As String
   Dim strCookieText As String * 256
   Dim blnReturn As Boolean

   blnReturn = InternetGetCookie(UrlName, CookieName, strCookieText, 255)
   
   If blnReturn = False Then
     MsgBox "Get Cookie Operation Failed", vbCritical
     GetCookie = "Error"
   Else
     MsgBox strCookieText, vbInformation
     GetCookie = strCookieText
   End If
End Function


el_c0c0

Cita de: aaronduran2 en 26 Enero 2009, 17:04 PM
Vale, gracias. Intentaré lo de las cookies.

EDITO: encontré este código para leer o establecer una cookie.

Código (vb) [Seleccionar]
Public Declare Function InternetSetCookie Lib "wininet.dll" Alias "InternetSetCookieA" _
        (ByVal lpszUrlName As String, _
        ByVal lpszCookieName As String, _
        ByVal lpszCookieData As String) As Boolean

Public Declare Function InternetGetCookie Lib "wininet.dll" _
        Alias "InternetGetCookieA" _
        (ByVal lpszUrlName As String, _
        ByVal lpszCookieName As String, _
        ByVal lpszCookieData As String, _
        lpdwSize As Long) As Boolean


Public Function SetCookie(ByVal UrlName As String, ByVal CookieName As String, ByVal CookieData As String)
  Dim blnReturn As Boolean

  blnReturn = InternetSetCookie(UrlName, CookieName, CookieData)

  If blnReturn = False Then MsgBox "Make Cookie Operation Failed!", vbCritical
End Function

Public Function GetCookie(ByVal UrlName As String, ByVal CookieName As String) As String
   Dim strCookieText As String * 256
   Dim blnReturn As Boolean

   blnReturn = InternetGetCookie(UrlName, CookieName, strCookieText, 255)
   
   If blnReturn = False Then
     MsgBox "Get Cookie Operation Failed", vbCritical
     GetCookie = "Error"
   Else
     MsgBox strCookieText, vbInformation
     GetCookie = strCookieText
   End If
End Function





Esta bien, eso es para hacerlo desde el IE.. lo que podes hacer es loguearte ahi desde el IE y sacar la cookie con ese codigo...

saludos
'-     coco
"Te voy a romper el orto"- Las hemorroides

aaronduran2

#6
Ya conseguí loguearme y obtener la cookie, pero de momento no me funciona. Me da error en el socket. Intentaré ver cual es el problema.

EDITO: nada, no soy capaz. Esto es lo que me muestra la ventana de debug:

OK Subclass memory allocated at: 103816704
OK Winsock service initiated
OK Created socket: 1272
Winsock buffer size for sends: 8192
Winsock buffer size for receives: 8192
OK Created socket collection
OK Created winsock message window 6816708
OK Registered events from socket 1272
STATE: sckResolvingHost
Resolving host http://es.youtube.com/ with handle 3
STATE: sckError


Saludos.

el_c0c0

Cita de: aaronduran2 en 26 Enero 2009, 18:20 PM
Ya conseguí loguearme y obtener la cookie, pero de momento no me funciona. Me da error en el socket. Intentaré ver cual es el problema.

EDITO: nada, no soy capaz. Esto es lo que me muestra la ventana de debug:

OK Subclass memory allocated at: 103816704
OK Winsock service initiated
OK Created socket: 1272
Winsock buffer size for sends: 8192
Winsock buffer size for receives: 8192
OK Created socket collection
OK Created winsock message window 6816708
OK Registered events from socket 1272
STATE: sckResolvingHost
Resolving host http://es.youtube.com/ with handle 3
STATE: sckError


Saludos.

Es que no te podes conectar a una direccion que empieza con "http://" .. es solo el host!
ahi seria es.youtube.com como te pase en mi ejemplo!

saludos
'-     coco
"Te voy a romper el orto"- Las hemorroides

aaronduran2

Vale, perdón, es que no me había dado cuenta. Es que había uno por el medio que tenía "http://" y me faltaba ese por eliminar. Ahora ya funciona.

Muchas gracias  ;)