Архив рубрики "Php"

Дек 2

Интернет-магазин Technomagic.by

Рубрики: Php, Деньги Метки: ,

Теперь у меня есть опыт разработки интернет-магазина с нуля! С марта по август 2010-го, на движке CodeIgniter для Алексея Морозова был выполнен шоп по продаже бытовой и цифровой техники – http://technomagic.by/. Работы было очень много (с нуля все-таки) но сделано, я думаю хорошо и удобно что для покупателей, что для редакторов шопа.

При ежедневной упорной работе все можно было разработать и отладить за месяц, но меня в то время очень отвлекала основная деятельность. Читать далее »

Окт 14

Как получить кол-во FeedBurner подписчиков, зная домен

Рубрики: Php

Сегодня утром именно такой вопрос стоял. Полазил по API фидбернера, ничего не нашел подобного. Дело в том, что на сайте может быть вообще куча разных каналов, а мне нужно узнать количество подписчиков главной новостной ленты сайта, прожженой ч-з фидбернер.

Полазил по рейтингам блогов – там вообще все тупо спрашивают у юзера адрес фида… лол… зачем делать дополнительное действие, раз фид и так получить можно.

Остановился на таком алгоритме:

  1. Скачиваем страницу, например http://www.samborsky.com
  2. Ищем link теги, с атрибутом application/rss+xml
  3. Получаем полный адрес фида, например, если он указан локально /feed/
  4. Заходим на полный адрес фида, получаем таким образом адрес редиректа – http://feeds.feedburner.com/samborsky
  5. Имея на руках полный адрес ленты в фидбернере – получить кол-во подписчиков – дело техники

Привожу кусок класса, кто заметит ошибку, или знает, как сделать лучше пишите.

function feedburner(){

	if( !$this->page_loaded ){
		$this->domain_source();
	}

	if( $this->page_loaded ){

		$feed = '';

		// Найдем RSS фид
		preg_match_all('/<link(.+?)\s*\/?\s*>/i',$this->source_code,$out,PREG_SET_ORDER);
		foreach( $out as $link ){

			$link = strtolower($link[1]);

			if( strpos($link,'application/rss+xml') ){

				// Если адрес взят в двойные кавычки
				if( preg_match('/href="(.+?)"/i',$link,$href) ){
					$feed = $href[1];
					break;
				}

				// Если адрес взят в одинарные кавычки
				if( preg_match("/href='(.+?)'/i",$link,$href) ){
					$feed = $href[1];
					break;
				}

				// Если адрес указан без кавычек
				if( preg_match("/href=\s*(.+)\s*/i",$link,$href) ){
					$feed = $href[1];
					break;
				}
			}
		}

		// Получаем полный адрес фида
		$url = parse_url($feed);
		if( empty($url['host']) ){
			$feed = 'http://' . $this->domain . $feed;
		}

		// Скачиваем фид, получаем реальный адрес
		if( $this->get($feed) ){

			// Получаем последний урл, на который редиректили
			$feed = $this->get_info(CURLINFO_EFFECTIVE_URL);

			if( !empty($feed) ){

				// Нужно получить название канала
				if( preg_match('/feedburner.com\/(.+?)$/i',$feed,$out) ){

					$feed = $out[1];

					// Делаем запрос на фидбернер
					if( $this->https_get('https://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=' . $feed) ){

						echo $this->data;
						if( preg_match('/circulation="(\d+?)"/',$this->data,$match) ){

							return $match[1];
						}
					}
				}
			}
		}
	}

	return 'n/a';
}

——— Читать далее »

Сен 1

s_http: Получаем курсы валют с ЦБ России

Рубрики: Php

Нужно было с сайта центрального банка России парсить курсы валют. Задачу решил минут за 15-20, основное время ушло на формирование регулярки, которая тянет цифры. Всю работу c Curl делает за меня мой класс s_http.

Исходник:
Читать далее »

Авг 30

Класс-обертка для curl — s_http

Рубрики: Php

Было время, когда я пытался написать серию статей о библиотеке curl: раз, два, три, но бросил эту затею, не потому, что статьи были бесполезные, и их никто не читал, а потому, что сам я уже не пользуюсь функциями curl в чистом виде. А писать статьи о том, чем сам не пользуешся – бред.

Год назад я написал класс s_http (сокр. samborsky_http), который облегчил мою программистскую жизнь. Именно об этом классе я хотел бы поговорить. Создан он как раз на основе curl, а пользоваться им гораздо проще, чем работать с чистым curl api. Главное – для большинства задач он подходит.

Особенности:

  • Класс старается получить от сервера сжатые средствами gzip,deflate данные, если конечно сервер такое может. Нужно для экономии трафика.
  • Если класс в момент скачивания страницы получает 302 редирект, он переходит по нему.
  • По умолчанию User-Agent файрфоксовский, но вы можете сами его установить.
  • Все кукисы, полученные от вебсервера запоминаются. Очень удобно, если нужно парсить из-под логина.
  • Если пользователем изначально не задан Referer, то класс ставит в это поле предыдущую скачанную страницу, как это делают браузеры.

Подключение класса, инициализация.

Для последующих примеров, я этот код не пишу. Но важно понимать, что он обязателен.

		// Подключаем файл с классом
		include('s_http.php');

		// Создали класс
		$http = new s_http();

		// Инициализируем
		$http->init();

Пример I. Скачиваем главную страницу Яндекса.

Самый распространенный код. Просто скачиваем страницу.

		if( $http->get('http://www.yandex.ru/') ){

			// Все ок, выводим скачанную информацию
			echo $http->data();
		}
		else{

			// Покажем последнюю ошибку
			echo $http->error();
		}

Читать далее »

Апр 17

Уроки PHP: «CURL, базовые примеры I»

Рубрики: Php Метки: ,

Предыдущий мой урок был достаточно не прост, в связи с этим я решил показать как делать базовые вещи с помощью библиотеки curl. Комментировать буду каждую значимую строку, но если будут вопросы – пишите в комментариях.

Как скачать страницу, зная ссылку?

<?php

	// Создаем подключение
	if( $curl = curl_init() ){

		// Задаем ссылку
		curl_setopt($curl,CURLOPT_URL,'http://www.samborsky.com');
		// Скачанные данные не выводить поток
		curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);

		// Скачиваем
		$out = curl_exec($curl);

		// Показываем скачанные данные
		echo $out;

		// Закрываем соединение
		curl_close($curl);
	}

?>

Читать далее »

Апр 9

Уроки по PHP: «CURL, делаем автоматический постер в BobrDobr.ru»

Рубрики: Php Метки: , ,

Все знают, что социальные закладки превратились в линкопомойки, уже написано более десятка автоматических постеров, которые засирают базу соц. закладок ссылками на ГС и ГБ. Напишем и мы еще один ;)

Цель: Используя функции библиотеки CURL сделать искусственный HTTP POST запрос, авторизироваться, сохранить соц. закладку, и в целом показать как обычно делаются автоматические постеры.

bobrДа, у бобрдобра есть API для постинга закладок, но я усложню себе задачу, и с имитирую заход из браузера, введу программно логин и пароль, заполню поля для сохранения закладки.

Сперва нужно посмотреть, как соц. закладка добавляется вручную, и проследить за этим процессом Http сниффером (я использую плагин для FIrefox – HttpFox), а затем воспроизвести программно.

1. Набираем в браузере адрес http://bobrdobr.ru/

2. Вводим логин и пароль, смотрим сниффер. Видим главное:

  1. Отправлять POST запрос нужно на адрес http://bobrdobr.ru/login/
  2. POST данные выглядят следующим образом:

    username=%ЛОГИН%&password=%ПАРОЛЬ%&remember_user=on&next=%2F

  3. При успешном входе сервис пересылает нас ч-з 302-редиррект на главную страницу.

login Читать далее »

Апр 8

Уроки по PHP: «CURL, введение»

Рубрики: Php Метки: ,

Этой статьей начинаю свою серию лекций по программированию на PHP. Меня не раз просили в комментариях написать с чего начать, и вот я наконец решился.

Единственное: статьи мои будут рассчитаны не для начинающих программистов, а на тех кто уже знает основы PHP. Основы PHP мне не интересно рассказывать, хотя бы потому, что у PHP есть онлайн справка, в том числе на русском, и она хорошо структурирована. В общем начав читать официальную справку, можно со временем освоить PHP на хорошем уровне. Лично я учился именно по этой справке, но когда я изучал PHP, описание функций было в основном на английском, так что сейчас гораздо проще изучить этот язык программирования.

CURLС вступлением я почти закончил. Почему я начал именно с описания функций CURL ? Наверное потому, что это одна из моих любимых библиотек, ее я знаю отлично и писал десятки приложений, используя функции CURL различной сложности.

Т.к. статьи не для новичков, я пропускаю установку этого модуля к PHP (вы без труда найдете в инете, как установить ее на денвер) и перехожу к примерному списку лекций по этой библиотеке. Да, лекций по CURL будет несколько, в одну я явно не вложусь. К каждой будет прилагаться практический пример, актуальный для нашего времени.

К примеру как вам такие лекции:

  • Работа с HTTPS. Для примера покажу как получить строку «Прибыль за сегодня» в Адсенсе
  • Автоматический постинг, я покажу как создать робота, который постит закладку скажем в Бобрдобр
  • Имитация браузера пользователя при парсинге гугла, к примеру я подделаю http заголовки так, что их будет тяжело  отличить от Firefox-овских

Ну и еще чего нибудь придумаю по настроению, думаю будет интересно.

Читать далее »

Мар 16

Скрипт для поиска <noindex> и списка ссылок

Рубрики: Php Метки: ,

В одном проекте, который мне поручили, нужно было проверять обратную ссылку и смотреть, чтобы ее не взяли в <noindex>-тег. Чтобы потестировать различные варианты и ситуации на разных сайтах, я создал скрипт с интерфейсом. Этот скрипт показал проблемы моей функции, которые я постепенно устранил. Поделюсь сперва своим алгоритмом, который проверяет находится ли ваша ссылка в теге <noindex>, или она доступна к индексации яндексом.

  1. Скачиваю страницу, определяю тип кодировки, если отличная от UTF-8, конвертирую ее в эту кодировку.
  2. С помощью жадного регулярного выражения /<noindex>(\s*.*?\s*)<\/noindex>/i я получаю все вхождения.
  3. Каждое вхождение проверяю специальной функцией, в которой так же вызывается регулярное выражение, которое получает ссылку.

Получился интересный скрипт, который может оказаться кому-либо полезным. Во первых он показывает содержимое тега <noindex>, красным отмечает, если ваш домен взят в этот тег. А во вторых он показывает список всех ссылок, которые нашел на странице. Читать далее »

Фев 26

Скрипт проверки наличия сайтов в DMOZ каталоге

Рубрики: Php Метки: , , ,

Написал этот скрипт уже давненько, но все никак не выложу. Точней я давно написал функцию проверки сайта в DMOZ каталоге, а обертку только сейчас сделал. Функция была частью проекта, который развалился так и не начавшись.

Что за проект? Кому интересно расскажу: заказали мне полный аналог i.pr-cy.ru, т.е. той панельки, которая многим не дает покоя (стабильно мне предлагают ее написать, но больше 300$ никто не дает), мне этот проект вполне по зубам (даже лучше могу сделать), все функции в отдельности написаны, осталось только собрать все в одном проекте, сделать аккаунты пользователей, поставить лимиты на проверки и т.д. Но неожиданно заказчик решил отказаться от моих услуг. В общем хозяин-барин, жаль что предоплату не взял сразу. Кстати кому нужна такая панелька, радующая множество веб-мастеров, пишите, с удовольствием доделаю тот проект, который оцениваю в 300-500$ (в зависимости от подробностей).

Как работает скрипт?

Он берет домен, подставляет его в качестве параметра для поиска в DMOZ, к примеру:

http://search.dmoz.org/cgi-bin/search?search=samborsky.com

После чего парсит результаты поиска, и возвращает количество совпадений. Для моего блога результат 1, для yandex.ru – 53, для сайта не в dmoz.org – 0. По моему так повеселей, чем показывают все чекеры в той же сапе или в j2j (Да/Нет).

Важное замечание

Как всегда сайты с www. и без него – это разные вещи. Потому если вашего сайта нет в DMOZ, в то время, как вы уверены что он там есть – проверьте, правильно ли задали имя домена. Читать далее »

Ноя 27

Выполнен заказ от plasticfantastic.ru

Рубрики: Php, Wordpress Метки: , ,

Выполнил заказ сайта www.plasticfantastic.ru, который специализируется на пластической хирургии и косметологии, занимается освещением популярных пластических операций: груди, носа, лица. Их сайт работает на движке WordPress 2.3.2

Техническое задание было примерно следующим:

Расширить функционал сайта на движке вордпресса:

  • Ввести регистрацию новых пользователей.
  • Систему личных блогов с возможностью добавления до и после операционных фотографий.
  • предусмотреть сжатие размеров фотографий, в случае если наши клиенты загружают огромные фото прямо с камеры. Эта обработка должна происходить на сервере, а фото после обработки должно корректно вписываться в сайт.
  • На каждой фотографии нужно написать копирайты нашего сейта.
  • Предусмотреть возможность комментирования блогов.
  • У каждого блоггера должны быть своя админ-панель, в которой он сможет менять текст своих записей, добавлять/удалять фотографии и т.д.
  • Сделать возможность редактировать посты блоггеров, комментарии из админки вордпресса.

Взялся за проект с большим желанием, ведь по сути функционал, который им был нужен у меня был реализован на сайте о рыбалке. Там так же используется wordpress, но версии 2.6, потому копипаста кода не было, ведь многие современные функции вордпресса не доступны в версии 2.3.2, а предлагать клиентам обновится до последнего вордпресса не захотел из-за его прожорливости в плане ресурсов. Поэтому многое пришлось переписать. Читать далее »