Te respondo por aquí al privado...
en esta parte de tu código obtienes una respuesta con un documento en JSON:
Dim URLDATA As String = cliente.DownloadString(url)
TextBox2.Text = URLDATA
Mediante el ejemplo que te mostré, deserializas ese JSON, tal que así:
<Serializable>
Public NotInheritable Class MyType
Public Property [Error] As Boolean
Public Property Title As String
Public Property Duration As Integer
Public Property File As String
Public Sub New()
End Sub
Public Overrides Function ToString() As String
Return New JavaScriptSerializer().Serialize(Me).ToString
End Function
End Class
Dim obj As MyType = New JavaScriptSerializer().Deserialize(Of MyType)(URLDATA)
Y por último, en la propiedad
MyType.File tienes la url al archivo .mp3 que puedes descargar, por ejemplo usando la función
cliente.DownloadFile().
cliente.
DownloadFile(obj.
File, IO.
Path.
GetFileName(obj.
File))
No tiene que ver con el tema, pero ya que estás abierto a escuchar críticas, pues acabo de fijarme en esta parte del código donde usas esta expresión regular...
Private Function getID(ByVal url As String) As String 'Function by Stack Overflow Forum.
Try
Dim myMatches As System.Text.RegularExpressions.Match
Dim MyRegEx As New System.Text.RegularExpressions.Regex("youtu(?:\.be|be\.com )/(?:.*v(?:/|=)|(?:.*/)?)([a-zA-Z0-9-_]+)", RegexOptions.IgnoreCase) 'This is where the magic happens/SHOULD work on all normal youtube links including youtu.be
myMatches = MyRegEx.Match(url)
If myMatches.Success = True Then
Return myMatches.Groups(1).Value
Else
Return ""
End If
Catch ex As Exception
Return ex.ToString
End Try
End Function
y... bueno. Me limitaré a decir que copiar cosas publicadas por programadores random de Internet con conocimientos mediocres sobre el lenguaje que están manipulando, conlleva a aprender y acostumbrarse a malas prácticas de programación.
En no pocas ocasiones, el uso de expresiones regulares es un planteamiento totálmente innecesario y con un margen de error (falsos positivos y fallos de captura) que puede llegar a ser excesivamente elevado, y por ende, intolerablemente ineficiente. Aparte, si ya de por sí el motor RegEx de .NET (y de cualquier otro) supone un impacto negativo en el rendimiento de la aplicación, las expresiones regulares complejas son sinónimo de un impacto negativo aun mayor.
(en tu aplicación el impacto será inapreciable, insignificante. No es algo de lo que debas preocuparte, pero yo siempre hablo en términos generales.)
RegEx es el recurso fácil y multi-usos. En muchas ocasiones es tan fácil de aplicar una expresión regular que nos olvidamos de que podemos hacer las cosas de forma más eficiente... aunque no será posible hacerlo mejor en todos los casos, pero en muchos sí, cómo este.
A continuación te mostraré como puedes y deberías obtener la id de un video de Youtube usando los miembros
built-in más apropiados disponibles en la librería de clases de .NET Framework sin tener que recurrir al uso de expresiones regulares.
Bueno, primero estas funciones reutilizables que he escrito:
Public Shared Function GetQuery(ByVal url As String) As NameValueCollection
Return GetQuery(url, Encoding.UTF8)
End Function
Public Shared Function GetQuery(ByVal url As String, ByVal enc As Encoding) As NameValueCollection
Return GetQuery(New Uri(url), enc)
End Function
Public Shared Function GetQuery(ByVal uri As Uri) As NameValueCollection
Return GetQuery(uri, Encoding.UTF8)
End Function
Public Shared Function GetQuery(ByVal uri As Uri, ByVal enc As Encoding) As NameValueCollection
Dim queryString As String = uri.GetComponents(UriComponents.Query, UriFormat.UriEscaped)
Return HttpUtility.ParseQueryString(queryString, enc)
End Function
Y entonces...
Dim query As NameValueCollection = GetQuery("https://www.youtube.com/watch?v=FtcVlSytJF4&feature=em-uploademail")
Dim id As String = query("v")
If String.IsNullOrEmpty(id) Then
Throw New NullReferenceException()
Else
' ...
End If
PD: cabría destacar que, Microsoft, para algunas implementaciones internas hace uso de la clase RegEx, pero usar cualquier miembro de la librería de clases de .NET Framework cuya implementación interna recurra al uso de expresiones regulares, siempre será mejor opción y más seguro que implementar tu propio algoritmo '
home-made' de análisis de string mediante expresiones regulares aleatorias cuya eficacia en no pocas ocasiones es más que cuestionable de lo ofusca que es su sintaxis o los ejemplos de captura (si es que el autor proporciona alguno)...
Saludos.