X   Сообщение сайта
(Сообщение закроется через 2 секунды)

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Постинг новостей в ЖЖ
DARK_Vovich
сообщение 2011-01-23, 17:12
Сообщение #1
Любитель
Иконка группы

Группа: Eleanor user
Сообщений: 119
Регистрация: 2010-04-23
Версия системы: RC5

Репутация:   нет  
Всего: нет


Итак, стояла у меня как-то задача сделать возможность размещения новостей с сайта в ЖЖ. Я рассмотрел различные варианты, как это можно сделать.
В LiveJournal можно передавать текст двумя способами:
1. В виде ссылки
http://www.livejournal.com/update.bml?subject='Заголовок сообщения'&event='Основной текст'

+проще реализовать
-ограничение длины передаваемой строки (около 500-700 символов)

2. Через форму
<form method="post" action="http://www.livejournal.com/update.bml" name="updateForm" target="_blank">...</form>

+неограниченное количество символов
-сложнее реализация

В итоге я решил использовать первый способ и позаимствовать идею с сайта GZT.ru: идея в том, что в livejournal публикуется красивая плашка с кратким текстом и ссылкой на полную новость.

Вывод в шаблон сделал через закладки (bookmark), т.к. не использовал их по назначению. Но можно сделать и отдельную переменную.

Пример реализации: http://musora.bolshe.net/news/blogs...-po-russki.html (кнопка "В блог")

Как реализовать на JS не знал, поэтому сделал на php. Код только для систем с кодировкой WIN-1251 (не UTF8), т.к. здесь используется система перекодировки текста в utf8 для передачи:
1. Открываем файл modules/news/user/index.php
1.1. Ищем строчку
if(!empty($Mainclass->vars['allow_bookmarks']) and $Mainclass->Login->IsUser())
и комментируем (ставим /* ... */ следующий участок кода
/*if(!empty($Mainclass->vars['allow_bookmarks']) and $Mainclass->Login->IsUser())
	{
		$uid=(int)$Mainclass->Account->GetValue('id');
		$Mainclass->Db->Query('SELECT `id` FROM `f_bookmarks` WHERE `uid`='.$uid.' AND `mid`='.$Mainclass->GetModVal('id').' AND `value`='.$arr['id'].' LIMIT 1',__file__,__line__);
		if($Mainclass->Db->Num_rows()==0)
			$bookmark='<a href="#" onclick="return ShowAddBookMarkForm('.$arr['id'].')">'.$Mainclass->lang['news']['add_to_b'].'</a>';
		else
		{
			list($bookmark)=$Mainclass->Db->Fetch_row();
			$bookmark='<a href="#" onclick="return DeleteBookMark('.$bookmark.',\'\',\'$(\\\'#bookmark\\\').html(bookmark_add)\')">'.$Mainclass->lang['news']['de<</span></span></span></span></span>/span>l_fr_b'].'</a>';
		}
		$bookmark.=Strings::JsVars(array(
											'module_id'=>$Mainclass->GetModVal('id'),
											'bookmark_add'=>'<a href="#" onclick="return ShowAddBookMarkForm('.$arr['id'].')">'.$Mainclass->lang['news']['add_to_b'].'</a>',
											'bookmark_delete'=>'<a href="#" onclick="return DeleteBookMark({value},\'\',\'$(\\\'#bookmark\\\').html(bookmark_add)\')">'.$Mainclass->lang['news']['del_fr_b'].'</a>',
		));
	}
	else
		$bookmark=false;*/


2. Ниже вставляем собственно саму функцию постинга
// Постинг новости в ЖЖ	
	$someword = 'Читать полностью на сайте Musora.Bolshe.Net';
	function myconvert($str='', $type='text'){
		
		$in_arr = array (
			chr(208), chr(192), chr(193), chr(194),
			chr(195), chr(196), chr(197), chr(168),
			chr(198), chr(199), chr(200), chr(201),
			chr(202), chr(203), chr(204), chr(205),
			chr(206), chr(207), chr(209), chr(210),
			chr(211), chr(212), chr(213), chr(214),
			chr(215), chr(216), chr(217), chr(218),
			chr(219), chr(220), chr(221), chr(222),
			chr(223), chr(224), chr(225), chr(226),
			chr(227), chr(228), chr(229), chr(184),
			chr(230), chr(231), chr(232), chr(233),
			chr(234), chr(235), chr(236), chr(237),
			chr(238), chr(239), chr(240), chr(241),
			chr(242), chr(243), chr(244), chr(245),
			chr(246), chr(247), chr(248), chr(249),
			chr(250), chr(251), chr(252), chr(253),
			chr(254), chr(255)
		);   
		$out_arr = array (
			chr(208).chr(160), chr(208).chr(144), chr(208).chr(145),
			chr(208).chr(146), chr(208).chr(147), chr(208).chr(148),
			chr(208).chr(149), chr(208).chr(129), chr(208).chr(150),
			chr(208).chr(151), chr(208).chr(152), chr(208).chr(153),
			chr(208).chr(154), chr(208).chr(155), chr(208).chr(156),
			chr(208).chr(157), chr(208).chr(158), chr(208).chr(159),
			chr(208).chr(161), chr(208).chr(162), chr(208).chr(163),
			chr(208).chr(164), chr(208).chr(165), chr(208).chr(166),
			chr(208).chr(167), chr(208).chr(168), chr(208).chr(169),
			chr(208).chr(170), chr(208).chr(171), chr(208).chr(172),
			chr(208).chr(173), chr(208).chr(174), chr(208).chr(175),
			chr(208).chr(176), chr(208).chr(177), chr(208).chr(178),
			chr(208).chr(179), chr(208).chr(180), chr(208).chr(181),
			chr(209).chr(145), chr(208).chr(182), chr(208).chr(183),
			chr(208).chr(184), chr(208).chr(185), chr(208).chr(186),
			chr(208).chr(187), chr(208).chr(188), chr(208).chr(189),
			chr(208).chr(190), chr(208).chr(191), chr(209).chr(128),
			chr(209).chr(129), chr(209).chr(130), chr(209).chr(131),
			chr(209).chr(132), chr(209).chr(133), chr(209).chr(134),
			chr(209).chr(135), chr(209).chr(136), chr(209).chr(137),
			chr(209).chr(138), chr(209).chr(139), chr(209).chr(140),
			chr(209).chr(141), chr(209).chr(142), chr(209).chr(143)
		); 
		
		if($type=='text') return str_replace($in_arr,$out_arr, strip_tags($str, '<a><strong><b>'));
		if($type=='title')return str_replace($in_arr,$out_arr,$str);
		if($type=='word') return str_replace($in_arr,$out_arr, $str);
	}
	
	$mytext = myconvert($text, 'word');
	$mytext2 = substr ($mytext, 0, 370-strlen (strrchr (substr ($mytext, 0, 370), ' ')));
	$myurl = 'http://musora.bolshe.net/'.substr($url,0,-1).'.html';
	$mytext3 = '<div style="border: 1px solid #7FC145; width: 500px; background-color: white; margin:0px; padding: 0px; clear: both;"><div style="border-bottom: 10px solid #fdbe31; padding: 10px;  margin:0px;"><a href="http://musora.bolshe.net"><img border="0" hspace="10" vspace="10" src="http://musora.bolshe.net/images/banners/logos/mbn_logo_sm.jpg" styl</span>e="border: 0px; margin: 0px;" /></a></div><div style="padding: 10px"><a style="color: #4fb839; text-decoration: none;" href="'.$myurl.'"><h2 style="background-color: white; padding:0px; margin: 0px 0px 5px 0px; text-align: left; border: 0px; font-size: 18px;">'.myconvert($title, 'title').'</h2></a><div style="padding: 0px; margin: 0px; color: black">'.$mytext2.'...<div style="text-align: right; padding: 0px;"><a style="color: #fdbe31;" href="'.$myurl.'">'.myconvert($someword, 'word').'</a></div><div style="clear:both"></div></div></div></div>';
	
	$bookmark='<a href="http://www.livejournal.com/update.bml?subject='.myconvert($title, 'title').'&event='.urlencode($mytext3).'" target="_blank" title="Запостить у себя в ЖЖ"><img src="images/icons/social/to_lj.gif" alt="" /></a>';
	// Конец правки


3. Настраиваем под себя:
3.1. Меняем название сайта на своё:
$someword = 'Читать полностью на сайте Musora.Bolshe.Net';

3.2. Здесь можно указать, какие тэги не обрезать
if($type=='text') return str_replace($in_arr,$out_arr, strip_tags($str, '<a><strong><b>'));

3.3. Меняем адрес сайта:
$myurl = 'http://musora.bolshe.net/'.substr($url,0,-1).'.html';

3.4. Шаблон оформления публикуемой плашки:
$mytext3 = '.....';

3.4.1. Заменяем цвета на свои (стили) и ссылку на логотип
<a href="http://musora.bolshe.net"><img border="0" hspace="10" vspace="10" src="http://musora.bolshe.net/images/banners/logos/mbn_logo_sm.jpg" style="border: 0px; margin: 0px;" /></a>

3.5. Меняем картинку кнопки "В блог"
$bookmark='<a href="http://www.livejournal.com/update.bml?subject='.myconvert($title, 'title').'&event='.urlencode($mytext3).'" target="_blank" title="Запостить у себя в ЖЖ"><img src="images/icons/social/to_lj.gif" alt="" /></a>';

3.6. Регулируем количество символов для обрезания
$mytext2 = substr ($mytext, 0, 370-strlen (strrchr (substr ($mytext, 0, 370), ' ')));


Не знаю, может это не кому не пригодится, но вполне имеет право на жизнь. Вывод можно изменить под себя, допустим убрать все оформление, тогда текста поместится больше.

Так же хотелось бы получить немного помощи от знающих:
1. Как этот страшный код можно оптимизировать?
2. Постоянно в логи пишется ошибка вида:
Цитата
Warning: Missing argument 2 for myconvert(), called in /var/www/mbn/data/www/musora.bolshe.net/modules/news/user/index.php on line 574 and defined Line: 516 in file /var/www/mbn/data/www/musora.bolshe.net/modules/news/user/index.php
URL: /news/blogs/proekt-kak-yeto-po-russki.html
Date: 2011-01-23 16:31:48
IP: 79.173.96.62

Warning: Missing argument 3 for myconvert(), called in /var/www/mbn/data/www/musora.bolshe.net/modules/news/user/index.php on line 574 and defined Line: 516 in file /var/www/mbn/data/www/musora.bolshe.net/modules/news/user/index.php
URL: /news/blogs/proekt-kak-yeto-po-russki.html
Date: 2011-01-23 16:31:48
IP: 79.173.96.62
Огромное спасибо peter за оптимизацию моего кривого кода!))
:dntknw:

Сообщение отредактировал DARK_Vovich - 2011-01-23, 19:44
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2011-01-23, 19:43
Сообщение #2
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 261
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


DARK_Vovich, функция myconvert требует передавать ей 3 параметра:

Цитата (DARK_Vovich @ 2024-03-28 16:26)
function myconvert($title,$text,$someword)


Вы же передаете только 1. Вот и ошибка.
Цитата
myconvert($text);
Перейти в начало страницы
+Цитировать сообщение
DARK_Vovich
сообщение 2011-01-23, 19:46
Сообщение #3
Любитель
Иконка группы

Группа: Eleanor user
Сообщений: 119
Регистрация: 2010-04-23
Версия системы: RC5

Репутация:   нет  
Всего: нет


Цитата (Alexander @ 2011-01-23, 20:43)
DARK_Vovich, функция myconvert требует передавать ей 3 параметра:



Вы же передаете только 1. Вот и ошибка.

Ага, уже понял. Спасибо!

Пост обновил.
Перейти в начало страницы
+Цитировать сообщение
Jon
сообщение 2011-01-25, 12:57
Сообщение #4
Любитель
Иконка группы

Группа: Бета-тестеры
Сообщений: 282
Регистрация: 2009-07-12
Из: Москва

Репутация:   нет  
Всего: 0


Уже близко )
Мне нужно сделать наоборот, копировать посты с моего ЖЖ. Либо граббером RSS или хз как.
Перейти в начало страницы
+Цитировать сообщение
NoIndex
сообщение 2011-01-25, 13:04
Сообщение #5
Опытный
Иконка группы

Группа: Бета-тестеры
Сообщений: 825
Регистрация: 2008-12-13
Из: Россия → Новосибирск
Версия системы: RC5

Репутация:   нет  
Всего: 24


Jon, http://mihavxc.ru/text/10_Perenos_bloga_s_livejournal_ZhZh_na_sobstvennyy_sayt/ - можно под Eleanor заточить.
Перейти в начало страницы
+Цитировать сообщение

Ответить в данную темуНачать новую тему
0 чел. читают эту тему (гостей: 0, скрытых пользователей: 0)
Пользователей: 0

 
RSS Текстовая версия 0.0408 сек.    12 запросов    GZIP включен    Сейчас: 2024-03-28, 16:26