Недавно в процессе оформления и настройки блога Prosvetika.ru, столкнулся с бесплатным хостингом блогов под крылом Google - Blogger.com
Довольно занимателный "конструктор" для блоггеров, но как всегда со своими тараканами и особенностями.
Одной из них является отсутствие sitemap в формате xml. Для англоязычных блогов это не страшно, поскольку гугл с удовольствием съедает в качестве sitemap фид блога. Но для нас - рускоязычных, гугла мало, нам Яндекс подавай. А этот поисковик привередливый и фид кушать не желает. Свои фиды он предлагает размещать в поиске по блогам.
Погуглив на эту тему в интернете, я понял, что большинство продвинутых блоговодов выкладывают заранее сгенерированные sitemap.xml на сторонние хостигни и скармливают их через robots.txt нашему Яше. Это сколько полуручной работы!? о_0
Мне как и любому нормальному человеку такой подход не по душе.
Поэтому сел и сделал свой генератор sitemap.xml из Atom фида.
- - -
Для начала залез в управление своего
После этого добавил в views.py класс:
import feedparser
...
class MySitemap(Sitemap):
changefreq = "daily"
priority = 0.6
def items(self):
al = feedparser.parse('http://prosvetika.ru/feeds/posts/default')
e = al.entries
return e
def location(self, obj):
return obj.link
Т.е не особо раздумывая подсунул джанговскому API sitemap список линков другого сайта. На Bloggers.com используется Atom 1.0, но библиотека FeedParser поддерживает и другие фиды, поэтому если надо будет, то можно и для других платформ использовать.
Далее довавляем в корневой urls.py:
from myapp.views import MySitemap
from django.contrib.sitemaps.views import sitemap
...
mysitemaps = {
'posts': MySitemap,
}
...
urlpatterns = patterns('',
...
(r'^myblog/sitemap\.xml$', cache_page(sitemap, 60 * 5), →
{'sitemaps': mysitemaps, 'template_name': 'custom_sitemap.xml'}),
)
Приходится делать свой шаблон sitemap.xml, поскольку sitemap API не расчитано на такое использование. Он добавляет к нашим url адрес корневого сайта, что нам не нужно. Поэтому в основной папке templates создаем шаблон sitemap.xml вида:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{% spaceless %}
{% for url in urlset %}
<url>
<loc>{{ url.location|cut:"http://owlman.net" }}</loc>
{% if url.lastmod %}<lastmod>{{ url.lastmod|date:"Y-m-d" }}</lastmod>{% endif %}
{% if url.changefreq %}<changefreq>{{ url.changefreq }}</changefreq>{% endif %}
{% if url.priority %}<priority>{{ url.priority }}</priority>{% endif %}
</url>
{% endfor %}
{% endspaceless %}
</urlset>
Вот и все. После перезагрузки процесса или апача по адресу http://сайт_донор/myblog/sitemap.xml получим требуемый нам sitemap.xml
Для Prosvetika.ru у меня получился вот такой:
P.S. Такой "финт ушами" возможен только на VDS или дружелюбном хостинге. Обычный, среднестатистический хостер сторонние библиотеки ставит с трудом или вообще не ставит. Так что пользуйтесь VDSом. И обратите внимание на
Комментарии