Je pense que c'est possible avec jQuery, mais n'importe quel code serveur ASP.NET est bon pour ma situation aussi. Avec jQuery je peux charger une page par exemple un div, et filtrer la div pour <title>
tag, mais je pense que pour les pages lourdes, il n'est pas bon de lire tout d'abord tout le contenu et ensuite lire la balise de titre. ou peut-être qu'il a une solution très simple? de toute façon je ne pouvais rien trouver à ce sujet sur Internet. merciComment lire le titre d'une page externe?
Répondre
merci Correcte à cjjer et Boo, je viens de lire plus sur regex et enfin le code ci-dessous travaille pour moi.
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
mais de toute façon, le problème reste, ce code est le téléchargement de la page entière et en cherchant à travers elle, dont un des sites lourds il a fallu plus de 2 ou 3 secconds pour terminer, mais semble que ce soit la seule façon dans la mesure comme je le sais: | Y a-t-il des suggestions pour affiner ce code?
Vous risquez de compromettre la sécurité d'une autre page Web dans le vôtre, juste pour lire le titre ... Vous devriez le faire avec les scripts côté serveur (asp.net, php, ...) et juste afficher le titre sur votre page Web. Chose d'une sorte de mise en cache, car il est facile d'aller chercher des titres à chaque demande.
oui, c'est ce que je pensais, mais je pourrais trouver une solution, pour lire un titre de site Web qui est donné par un utilisateur comme un lien .. – mohamadreza
Il n'existe pas de méthode simple pour récupérer le titre d'une page externe. Vous pouvez le faire côté serveur en utilisant un WebClient
et en analysant la réponse.
Cependant, il peut être utile de revoir l'exigence, est-ce vraiment nécessaire, combien de trafic supplémentaire et de latence va-t-il générer. Considérez aussi que vous pourriez générer une charge sur le site externe qui ne sait pas que tout ce que vous voulez est un titre, la création de la page peut être assez coûteuse.
yep, à droite, Je vais faire, après que les utilisateurs soumettent leur site Web ou des liens fav à l'application, l'application peut lire le titre et enregistrer le lien avec le titre de la base de données, plutôt que de forcer l'utilisateur à écrire un champ "titre" pour leur site .. – mohamadreza
string title=Regex.Match(new System.Net.WebClient().DownloadString(url),(@"<title>(.*?)</title>"))[0].Groups[1].ToString();
try.je ne suis pas sûr.
erreur synthax pour moi sur [0] – mohamadreza
Les titres apparaissent généralement dans les 100 premiers octets, vous pouvez donc essayer une requête de plage pour le premier 1KiB, essayez d'analyser (avec un analyseur d'erreur, car certaines balises de fermeture seront manquantes) et si échoue à revenir au chargement de la page entière.
Je ne suis pas sûr que tous les serveurs le supportent.
Voir, si cela aide
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: Essayez de vérifier avec certains outils de surveillance du réseau pour savoir quel est le texte que les serveurs envoient. J'ai utilisé le violoniste pour voir la sortie & l'a écrit à la console.
EDIT2: Je suppose que le titre est au début de la page.
merci, cela a fonctionné mais il n'est pas fiable, il ne retourne pas toujours le contenu de l'URL que vous avez entré .. redirections, page comprend et ajax actions, le faire brisé .. – mohamadreza
cjjer presque réussi.
D'abord, changer le regex: <title>(?<Content>.*?)?</title>
Deuxièmement, vous devez créer un objet premier match (juste au cas où votre URI n'a pas de titre).
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;
}
i pas trop sur regex, il déclenche cette erreur: parsing "(?. *?)?" - Construction de regroupement non reconnue – mohamadreza
Stoopid StackOverflow.
HTML Décodez cela. Duno pourquoi ils ne le font pas pour vous. –
Exterieur de la page en cours ou extérieur au site? – AnthonyWJones
externe au site, d'un autre domaine – mohamadreza