Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/19: Рейтинг темы: голосов - 19, средняя оценка - 4.53
XpressMusicMan Музыка24/7
46 / 35 / 3
Регистрация: 27.08.2010
Сообщений: 346
1
.NET 3.x

Получение favicon'а сайта

11.01.2011, 22:48. Показов 3568. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В проге ListView, в котором отображаются ссылки... И хотелось бы чтобы и иконки этих сайтов...
Если к примеру есть разные сайты(которые могут изменятся/добавляться), то как с помощью кода достать фавикон?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.01.2011, 22:48
Ответы с готовыми решениями:

Получение строки с сайта
Здравствуйте! Получаю строку с веб сайта. На веб сайте она имеет вот такой вид ETH Zürich –...

Получение заголовка сайта
Вопрос такой. Имеется код (работающий) для получения заголовка сайта по его адресу, сейчас я хочу...

Получение инфы с сайта
Нужно написать приложение которая будет сравнивать цены на нескольких интернет...

Получение данных с сайта
Доброе время суток! Встала необходимость экстренно решить задачу такого рода: Есть сайт,...

14
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
11.01.2011, 23:03 2
они как правило в корне сайта
www.cyberforum.ru/favicon.ico

скачать их можно как и любые другие изображения/файлы..тем же webclient например
0
XpressMusicMan Музыка24/7
46 / 35 / 3
Регистрация: 27.08.2010
Сообщений: 346
11.01.2011, 23:27  [ТС] 3
Накопал такую чтучку:
http://www.google.com/s2/favicons?domain=*любой домейн сюды*
и он выдаст фавикон... вот только парсерством я некогда не занимался, так что как его(фавикон), от туда достать?

Добавлено через 7 минут
Цитата Сообщение от m0nax Посмотреть сообщение
они как правило в корне сайта
www.cyberforum.ru/favicon.ico

скачать их можно как и любые другие изображения/файлы..тем же webclient например
Веб Клиентом не пользовался... не подскажете где начать?

Добавлено через 15 минут
Нашел еще вот что:
C#
1
2
3
4
5
6
7
            HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create("http://www.pictures.com/picture.jpg");
            HttpWebResponse myRes = (HttpWebResponse)myReq.GetResponse();
            Stream str = myReq.GetResponseStream();
            StreamReader readstr = new StreamReader(str, Encoding.UTF8);
 
            myRes.Close();
            readstr.Close();
О этой строке дает ошибочку:
C#
1
2
Stream str = myReq.GetResponseStream();
Ошибка    "System.Net.HttpWebRequest" не содержит определения для "GetResponseStream" и не был найден метод расширения "GetResponseStream", принимающий тип "System.Net.HttpWebRequest" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку)
0
826 / 717 / 110
Регистрация: 06.10.2010
Сообщений: 825
Записей в блоге: 1
11.01.2011, 23:46 4
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
using System.Drawing;
using System.IO;
using System.Net;
using System.Windows.Forms;
 
namespace WindowsFormsApplicationTest2 {
    public partial class MainForm : Form {
        public MainForm() {
            InitializeComponent();
 
            // Ссылки на сайты
            string[] urls = new[] {
                @"https://www.cyberforum.ru",
                @"http://www.ya.ru",
                @"http://www.google.ru",
                @"http://www.mail.ru",
            };
 
            // Список иконок
            ImageList imageList = new ImageList();
 
            // Скачиваем иконки
            using ( WebClient client = new WebClient() ) {
                for ( int i = 0; i < urls.Length; i++ ) {
                    byte[] data = client.DownloadData( urls[ i ] + @"/favicon.ico " );
                    Bitmap bitmap;
                    using ( MemoryStream ms = new MemoryStream( data ) ) {
                        bitmap = new Bitmap( ms );
                    }
 
                    // Добавляем элемент в listView1
                    ListViewItem item = new ListViewItem( "  " + urls[ i ], i );
                    listView1.Items.Add( item );
 
                    // Добавляем иконку в imageList
                    imageList.Images.Add( bitmap );
                }
            }
 
            // Добавляем список иконок к listView1
            listView1.SmallImageList = imageList;
 
            // Устанавливаем отображение маленьких значков
            listView1.View = View.SmallIcon;
        }
    }
}
1
XpressMusicMan Музыка24/7
46 / 35 / 3
Регистрация: 27.08.2010
Сообщений: 346
11.01.2011, 23:48  [ТС] 5
Сердечно благодарю
0
XpressMusicMan Музыка24/7
46 / 35 / 3
Регистрация: 27.08.2010
Сообщений: 346
12.01.2011, 02:12  [ТС] 6
Хотя чего то опять не пошло
Прога:
Вложения
Тип файла: rar @ListView.rar (161.9 Кб, 26 просмотров)
0
XpressMusicMan Музыка24/7
46 / 35 / 3
Регистрация: 27.08.2010
Сообщений: 346
12.01.2011, 21:24  [ТС] 7
Так некто не объяснит? Там проблема с отображением... Он вроде загружает...
Но не показывает в списке(не важно в каком стиле)

Добавлено через 6 минут
Причем когда запускаю дебаг или отладку, vhost вылетает(APPCRASH) дойдя до строки:
C#
1
StreamReader file = new StreamReader(Application.StartupPath+@"\Rate.txt");
Хотя если просто запустить, то все работает(не считая отображения иконок)...

Добавлено через 18 минут
Кстати, иконки скорее всего скачиваются, так как проге нужно несколько секунд чтобы загрузиться, а если убрать загрузку иконок- то прога открывается почти мгновенно...
0
826 / 717 / 110
Регистрация: 06.10.2010
Сообщений: 825
Записей в блоге: 1
12.01.2011, 22:15 8
Немного подправил код, теперь работает нормально:
Главное окно:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
using System;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Net;
using System.Windows.Forms;
 
namespace ListViewProject {
    public partial class Main : Form {
        private FavSites[] siteArr;
 
        public Main() {
            InitializeComponent();
        }
 
        private void GetRate() {
            string path = Path.Combine( Environment.CurrentDirectory, "Rate.txt" );
            var lines = File.ReadAllLines( path );
 
            siteArr = new FavSites[lines.Length];
            for ( int i = 0; i < lines.Length; i++ ) {
                siteArr[ i ] = new FavSites( lines[ i ] );
            }
 
            lblCount.Text = string.Format( "There were {0} lines.", lines.Length );
        }
 
        private void MainLoad( object sender, EventArgs e ) {
            GetRate();
 
            lstvWebsites.View = View.Details;
            lstvWebsites.Columns.Add( "Name" );
            lstvWebsites.Columns.Add( "URL" );
            lstvWebsites.Columns.Add( "Rate" );
 
            ListViewItem item;
 
            // Скачиваем иконки
            using ( WebClient client = new WebClient() ) {
                for ( int i = 0; i < siteArr.Length; i++ ) {
                    string url = siteArr[ i ].Url;
                    var data = client.DownloadData( url + "favicon.ico" );
                    Bitmap icon;
                    using ( MemoryStream stream = new MemoryStream( data ) ) {
                        icon = new Bitmap( stream );
                    }
                    imageList.Images.Add( url, icon );
                    item = new ListViewItem( siteArr[ i ].Name, url );
 
                    item.SubItems.Add( url );
                    item.SubItems.Add( siteArr[ i ].Rate );
                    lstvWebsites.Items.Add( item );
                }
            }
 
            lstvWebsites.Columns[ 0 ].Width = -1;
            lstvWebsites.Columns[ 1 ].Width = -1;
            lstvWebsites.Columns[ 2 ].Width = -1;
        }
 
        private void LstvWebsitesDoubleClick( object sender, EventArgs e ) {
            string str = lstvWebsites.SelectedItems[ 0 ].SubItems[ 1 ].Text;
            Process.Start( str );
        }
 
        private void ListToolStripMenuItemClick( object sender, EventArgs e ) {
            lstvWebsites.View = View.List;
            listToolStripMenuItem.Checked = true;
            detailsToolStripMenuItem.Checked = false;
            iconsToolStripMenuItem.Checked = false;
        }
 
        private void DetailsToolStripMenuItemClick( object sender, EventArgs e ) {
            lstvWebsites.View = View.Details;
            listToolStripMenuItem.Checked = false;
            detailsToolStripMenuItem.Checked = true;
            iconsToolStripMenuItem.Checked = false;
        }
 
        private void IconsToolStripMenuItemClick( object sender, EventArgs e ) {
            lstvWebsites.View = View.LargeIcon;
            listToolStripMenuItem.Checked = false;
            detailsToolStripMenuItem.Checked = false;
            iconsToolStripMenuItem.Checked = true;
        }
 
        private void ExitToolStripMenuItemClick( object sender, EventArgs e ) {
            Application.Exit();
        }
    }
}
FavSites:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
namespace ListViewProject {
    public class FavSites {
        readonly string name;
        readonly string rate;
        readonly string url;
 
        public FavSites( string line ) {
            var lines = line.Split( '#' );
 
            name = lines[ 0 ];
            url = lines[ 1 ];
            rate = lines[ 2 ];
        }
 
        public string Name {
            get { return name; }
        }
 
        public string Url {
            get { return url; }
        }
 
        public string Rate {
            get { return rate; }
        }
    }
}
Файл:
Код
Google#https://www.cyberforum.ru/#7/10
Hotmail#http://www.hotmail.com/#5/10
Twitter#http://www.twitter.com/#10/10
Facebook#http://www.facebook.com/#0/10
YouTube#http://www.youtube.com/#10/10
Прога:
ListViewProject.zip
Проблема была в том, что когда добавляешь иконку, нужно ей присваивать ImageKey. И когда добавляешь элемент в lstvWebsites, то элементу тоже нужно присваивать ImageKey, такую же, как и у изображения.
1
XpressMusicMan Музыка24/7
46 / 35 / 3
Регистрация: 27.08.2010
Сообщений: 346
12.01.2011, 22:46  [ТС] 9
Это единственная проблема? Если я сам попытаюсь сделать имеджКей, то все ок, или обязательно делать все изменения как в вашем коде?
Просто есть там вещи которые мне не совсем понятны, или те которые я пытаюсь избегать.
0
826 / 717 / 110
Регистрация: 06.10.2010
Сообщений: 825
Записей в блоге: 1
12.01.2011, 23:00 10
В общем-то нет. Скорее рекомендации вроде:
1. Использовать для загрузки File.ReadAllLines ибо это короче и вероятность ошибки меньше.
2. Использовать свойства вместо методов GetValue().
3. Комбинировать пути с помощью Path.Combine.
4. Называть переменные и методы более-менее осмысленно.
1
XpressMusicMan Музыка24/7
46 / 35 / 3
Регистрация: 27.08.2010
Сообщений: 346
12.01.2011, 23:47  [ТС] 11
А у меня прям все так ужасно с пунктом 4?
Кстати, простите за наглость, но у вас с пунктом "3.2 Дополнительные требования", не всегда все хорошо
И пункт 3 не совсем понял...
0
826 / 717 / 110
Регистрация: 06.10.2010
Сообщений: 825
Записей в блоге: 1
12.01.2011, 23:55 12
Цитата Сообщение от QwertyX Посмотреть сообщение
Дополнительные требования
Про это хорошо написано в книге С. Макконнелла "Совершенный код", стр 712. Про то, какой стиль скобок использовать давно споры ведутся.
Про Path.Combine могу сказать то, что он позволяет корректно соединить несколько путей и выдать исключение, если входные данные не корректны. Это позволяет не гадать при отладке, почему не открывается файл.
Хорошо про это написано:
Use Path.Combine to avoid ugly program failures!
1
XpressMusicMan Музыка24/7
46 / 35 / 3
Регистрация: 27.08.2010
Сообщений: 346
13.01.2011, 01:01  [ТС] 13
Цитата Сообщение от Unril Посмотреть сообщение
Про это хорошо написано в книге С. Макконнелла "Совершенный код", стр 712.
Надеюсь вы это не по памяти сказали!
Иначе это очень странно О_О
0
826 / 717 / 110
Регистрация: 06.10.2010
Сообщений: 825
Записей в блоге: 1
13.01.2011, 07:21 14
Цитата Сообщение от QwertyX Посмотреть сообщение
Надеюсь вы это не по памяти сказали!
Открыл и посмотрел, книжка недалеко лежит
0
QwertyX
13.01.2011, 08:42  [ТС]     .NET 3.x Получение favicon'а сайта
  #15

Не по теме:

Цитата Сообщение от Unril Посмотреть сообщение
Открыл и посмотрел, книжка недалеко лежит
Подтверждение на человечность принято :)

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.01.2011, 08:42

Получение данных с сайта
Здравствуйте. Начал недавно изучать unity и c# , возник вопрос: Как из 2d приложения на unity...

qt получение данных с сайта
Добрый день форумчане.Как получить данные с сайта в интернете?возможно получить данные по API ключу?

Получение данных с сайта
Проблема вот в чем- есть сайт, открытый в браузере &quot;Яндекс&quot; на нем отображен числовой баланс,...

Получение данных с сайта
Добрый день! Я только начинающий программист. Хочу слепить программку для себя. Суть программы в...

Получение графики с сайта
Доброго времени суток! Вопрос такой: есть сайт, как мне получить графику с сайта и отобразить эту...

Получение текста с сайта
Доброго времени суток. Как можно получить текст с сайта, без чтения всей...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru