none
Obter favicon de um URL RRS feed

  • Pergunta

  • Estou a desenvolver uma app onde o usuário pode colocar os seus websites favoritos, programas etc ...

    Para simplificar a vida do usuário, quando este tenta editar um botão pode usar o icon  do website em vez de escolher uma imagem metro que terá que procurar atraves de uma OpenFileDialog no diretorio do programa (ou outra imagem qualquer)

    Para tal há um checkbox como na figura:

    Se estiver selecionada ,digamos assim, efetua a ação de extrair o icon do website caso contrario faz a ação normal.

    If TextBox1.Text = "" Then
                MsgBox("URL inválido", vbCritical + vbOKOnly, "Erro")
            Else
                My.Settings.btn2_url = TextBox1.Text
                My.Settings.Save()
            End If
    
            If CheckBox1.Checked = False Then
                If TextBox2.Text = "" Then
                    MsgBox("Não escolheu nenhuma imagem. Escolha um ficheiro válido e tente salvar outra vez", vbOKOnly + vbCritical, "Imagem inválida")
                Else
                    My.Settings.btn2_img = TextBox2.Text
                    My.Settings.Save()
                End If
            Else
    ' extrair icon do website
    ' guardar o url da imagem nos my settings
    
            End If
    
    
            Form1.btn2.BackgroundImage = Image.FromFile(My.Settings.btn2_img)
            Me.Close()
            
        End Sub

    Alguem me consegue explicar como faço ?


    Meu novo programa (Bloco de Notas) http://hyrokumata-app.blogspot.pt/2012/07/notepad-3-beta.html

    domingo, 13 de janeiro de 2013 13:02

Respostas

  • Olá Fabio,

    Em vários sites o favicon está localizado na seguinte url: http:// + Host(Ex:www.google.com) + / + favicon.ico .

    Segue um código de exemplo:

            ' Url do site que se quer obter o favicon
            Dim url As Uri = New Uri(UrldoSite)
     
            If url.HostNameType = UriHostNameType.Dns Then
                ' Pega a url do favicon
                ' url.Host vai retornar algo como www.google.com por exemplo.
                Dim iconURL = "http://" & url.Host & "/favicon.ico"
     
                ' Faz o download do Favicon
                Dim request As System.Net.WebRequest = System.Net.HttpWebRequest.Create(iconURL)
                Dim response As System.Net.HttpWebResponse = request.GetResponse()
                Dim stream As System.IO.Stream = response.GetResponseStream()
                'Disponibiliza o favicon em uma variavel do tipo Image
                Dim favicon = Image.FromStream(stream)
                 
            End If

    Existe uma outra maneira, que consiste em pegar a url do favicon num atributo da tag Head no html da página. Porém, este jeito é mais complicado, e não segue um padrão muito organizado. Por exemplo, em determinadas páginas a url do favicon está localizada no atributo Favicon, em outras no atributo Icon, em outras num link... e por aí vai.

    Mas esse método mais simples funciona perfeitamente na grande maioria dos sites...


    Herbert Lausmann

    Gerenciador de Logins


    domingo, 13 de janeiro de 2013 13:40

Todas as Respostas

  • Olá Fabio,

    Em vários sites o favicon está localizado na seguinte url: http:// + Host(Ex:www.google.com) + / + favicon.ico .

    Segue um código de exemplo:

            ' Url do site que se quer obter o favicon
            Dim url As Uri = New Uri(UrldoSite)
     
            If url.HostNameType = UriHostNameType.Dns Then
                ' Pega a url do favicon
                ' url.Host vai retornar algo como www.google.com por exemplo.
                Dim iconURL = "http://" & url.Host & "/favicon.ico"
     
                ' Faz o download do Favicon
                Dim request As System.Net.WebRequest = System.Net.HttpWebRequest.Create(iconURL)
                Dim response As System.Net.HttpWebResponse = request.GetResponse()
                Dim stream As System.IO.Stream = response.GetResponseStream()
                'Disponibiliza o favicon em uma variavel do tipo Image
                Dim favicon = Image.FromStream(stream)
                 
            End If

    Existe uma outra maneira, que consiste em pegar a url do favicon num atributo da tag Head no html da página. Porém, este jeito é mais complicado, e não segue um padrão muito organizado. Por exemplo, em determinadas páginas a url do favicon está localizada no atributo Favicon, em outras no atributo Icon, em outras num link... e por aí vai.

    Mas esse método mais simples funciona perfeitamente na grande maioria dos sites...


    Herbert Lausmann

    Gerenciador de Logins


    domingo, 13 de janeiro de 2013 13:40
  • Obrigado pela resposta mas estou com um problema.

    System.ArgumentException was unhandled

    Este erro aparece quando executa a linha de código:

    Dim favicon = Image.FromStream(stream)

     

    Meu novo programa (Bloco de Notas) http://hyrokumata-app.blogspot.pt/2012/07/notepad-3-beta.html

    domingo, 13 de janeiro de 2013 16:16
  • Ah lá está. nem todos os sites são assim :/

    O bIng que foi o que testei não deu mas obrigado funciona para outros como google. Vou ter que usar o evento Try Catch as Exc

    Resposta certa


    Meu novo programa (Bloco de Notas) http://hyrokumata-app.blogspot.pt/2012/07/notepad-3-beta.html

    domingo, 13 de janeiro de 2013 16:22
  • Exatamente, irá dar erro quando o site não disponibilizar o favicon desta forma...


    Herbert Lausmann

    Gerenciador de Logins

    domingo, 13 de janeiro de 2013 17:15