Pergunta

Eu acho que é possível com jQuery, mas qualquer código serverside ASP.NET é bom para a minha situação também.

Com jQuery eu posso carregar uma página para, por exemplo, um div, e filtrar o div para tag <title>, mas acho que para páginas pesadas, não é bom para primeiro ler todo o conteúdo e, em seguida, ler o título de tag .. ou talvez ele tenha uma solução muito simples? De qualquer forma eu não poderia encontrar nada sobre isso a partir de internet. graças

Foi útil?

Solução

ok graças a cjjer e Boo, Acabei de ler mais sobre regex e, finalmente, o código abaixo está funcionando para mim.

Dim qq As New System.Net.WebClient
    Dim theuri As New Uri(TextBox1.Text)
    Dim res As String = qq.DownloadString(theuri)
    Dim re As Regex = New Regex("<title\b[^>]*>(.*?)</title>", RegexOptions.Singleline)
    Dim ma As Match = re.Match(res)


    If Not ma Is Nothing And ma.Success Then
        Response.Write(ma.Groups(1).Value.ToString())
    Else
        Response.Write("error")
    End If

Mas de qualquer maneira, os restos de problema, este código está baixando toda a página e buscando através dele, que um sites pesados ??levou mais de 2 ou 3 secconds para terminar, mas parece que é a única maneira, tanto quanto eu sei: | Existe alguma sugestão para refinar esse código?

Outras dicas

cjjer quase acertou.

Em primeiro lugar, mudar a regex para: <title>(?<Content>.*?)?</title>

Em segundo lugar, você precisa criar um objeto jogo da primeira (apenas no caso de seu URI não tem um título).

Match tMatch = new RegEx(@"<title>(?<Content>.*?)?</title>").Match(new System.Net.WebClient().DownloadString(url));

if ((null != tMatch) && (tMatch.IsSuccess)) {
    //  yay.
    title = tMatch.Groups("Content").value;
}

Títulos ocorrem geralmente nas primeiras centenas de bytes, então você pode tentar um pedido de intervalo para o primeiro 1KiB ou assim, tentar analisar que (com um analisador de correção de erros, uma vez que algumas marcas de fechamento vai estar ausente) e se isso falhar cair de volta a carregar a página inteira.

Seria risco de segurança para que você carregue qualquer outra página da web em seu, apenas para leitura título ... Você deve fazer isso com o servidor scripting lateral (asp.net, php, ...) e saída apenas o título para sua página web. Coisa de algum tipo de caching porque é perfeita para buscar títulos em cada solicitação.

Não há nenhuma maneira simples limpo para recuperar o título de uma página externa. Você poderia fazê-lo do lado do servidor usando um WebClient e analisar a resposta.

No entanto, pode valer a pena rever a exigência, é realmente necessário, quanto tráfego extra e latência é que vai gerar. Considere também que você poderia estar gerando carga no site externo que desconhece tudo que você quer é um título, a criação de páginas pode ser bastante caro.

string title=Regex.Match(new System.Net.WebClient().DownloadString(url),(@"<title>(.*?)</title>"))[0].Groups[1].ToString();

try.i am não tenho certeza.

Eu não tenho certeza se todos os servidores suportam isto.
Veja, se isso ajuda


char[] data = new char[299];
System.Net.HttpWebRequest wr =(HttpWebRequest)WebRequest.Create("http://www.yahoo.com");
wr.AddRange("bytes", 0, 299);
HttpWebResponse wre = (HttpWebResponse)wr.GetResponse();
StreamReader sr = new StreamReader(wre.GetResponseStream());
sr.Read(data, 0, 299);
Console.WriteLine((data));
sr.Close();

EDIT: Tente verificar com alguma ferramenta de monitoramento de rede para descobrir o que é o texto que servidores de enviar para fora. Eu usei Fiddler para ver a saída e escreveu para consolar.

EDIT2:. Estou assumindo o título de ser no início da página

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top