Показаны сообщения с ярлыком питон. Показать все сообщения
Показаны сообщения с ярлыком питон. Показать все сообщения

22 февр. 2010 г.

Трудности кодировок

Вчера вечером, совершенно неожиданно, пришла в голову мысль сделать кросспостинг этого блога в систему ВКонтакте.ру. Поскольку наработки у меня уже были, я решил, что это дело будет весьма легким. Но как я ошибался, кто бы знал.
Проблемы начались с парсинга RSS потока. В Питоне есть гениальная и простая библиотека feedparser. Все советуют ее использовать и по всему интернету разбросаны примеры ее использования. Но, есть один нюанс. Эта библиотека написана для версии питона 2. Я пытался ее сконвертировать для работы с третьей версией и она даже стала запускаться, но заглючила притащеная ей библиотека SGMLParser. Самое противное, что на сайте у этих ребят нигде не написано, что она предназначена исключительно для питона 2. Я был разочарован. В итоге пришлось побыстрому набросать свой собственный парсер на основе библиотеки minidom.
Дальше больше. Теперь у меня был прекрасно распарсеный RSS фид. Осталось самое малое - запостить его ВКонтакт. И вот тут меня ожидал еще один неприятный сюрприз. Фид у меня в кодировке UTF8, а ВКонтакт ожидает данные в формате CP1251 (дикие люди, весь мир уже давно перешел на UTF8). Это простое несовпадение кодировок, стоило мне многих часов упорного труда. В итоге, я лег в 5:30 утра, усталый и злой, так как не смог заставить питон посылать то, что мне надо (вернее в той кодировке, которая нужна).
Встав в 11 утра, я твердо решил добить этот вопрос. Вооружившись снифером и такой-то матерью, я вышел на бой с ненавистными кракозябрами. Теперь я в совершенстве знаю, как в Питоне представляются строки, байты, кодировки и как они посылаются на сайты в любых запросах. К двум часам дня, кодировки были побеждены.
Пришлось опять самому писать перекодирование (escaping) CP1251 символов для POST реквеста, так как стандартный Питоновский модуль нагло продолжал конвертировать мой текст в UTF8. Универсальность не всегда хороша, как оказалось.
Что в итоге: есть скрипт, который берет RSS фид этого блога, определяет появились ли новые статьи, и если появились, постит их ВКонтакт, убирая предварительно весь HTML (кстати стандартного striptags в Питоне тоже нет, пришлось искать сторонний - опять для питона 2 - и конвертить его для тройки).

Выводы:
1. Отпуск до добра не доводит
2. Питон 3 еще долго будет порабощать мир - слишком велик вес питона 2
3. Еще раз убедился, что документация для Питона бедновата
4. Справедливости ради стоит признать, что Питон - очень мощный язык

P.S.: На лекции по Питону в универе у меня прозвучала фраза: Анаконда написана на Питоне. Красиво:)

5 февр. 2010 г.

ВКонтакте

Я не могу общаться на сайте ВКонтакте, так как меня раздражает, что постоянно приходится туда заходить и проверять обновления. Я слишком уж привык к Google Reader и RSS. Мне нравится, что я могу получать только обновления, а не гадать видел я эту новость уже или нет. Именно эта функциональность меня раздражает на сайте ВКонтакте.
Поскольку весной мне предстоит читать лекции на тему языка Python, я подумал, что неплохо было бы его хорошенько изучить. Для этого надо бы реализовать на нем какой-либо проект. А для этого нужна потребность. Проблема ВКонтакте показалась мне неплохой задачей.
Сказано - сделано. Решил я сделать следующее: мой проект должен логиниться на сайт ВКонтакте под моим именем, скачивать все новости, определять, какие из них новые и отсылать мне на почту (в идеале, конечно, надо бы сделать из них RSS фид, но это можно оставить на потом). Итак, задача поставленна. Надо делать.
Долго ставил питон и мучился с поиском IDE. Пробовал работать в NetBeans - не понравилось. Очень тормозная система. Ну просто очень. В итоге остановился на старом добром Notepad++. Завтра попробую Eclipse с Python плагином.
На работе немного поигрался со скачиванием сайта через прокси. Очень долго ничего не работало. Оказалось потому, что в моем пароле к проксе есть символ "@". Парсеры внутренних питоновских библиотек не умеют работать с такими паролями.
В конце концов, логин на сайт ВКонтакте был успешно запрограммирован. Теперь можно приступать с следующей части: парсилке новостей.

В процессе разработки нашел несколько багов сайта ВКонтакте, а также открыл забавную фичу Яндекса. Когда в Яндексе набираешь слово, он выдает подсказки. Оказывается эти подсказки можно получить вот по этому URL (подставьте свой запрос всесто параметра part): http://suggest.yandex.ru/suggest-ya.cgi?ct=text/html&part=tes&v=2