Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Twitter посты и codebird

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Нужна помощь, сам не справлюсь. Спасибо!
Nikita aka Dingo
Отправлено: 19 Сентября, 2014 - 07:03:25
Post Id



Новичок


Покинул форум
Сообщений всего: 54
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)

[+]


Здравствуйте!

Задача у меня стояла такая:

Есть текст в переменной $text. Текст русскими буквами. Текст обработан, где нужно стоят решётки
Иногда текст идёт с картинкой, которая располагается по адресу $img
Задача: сделать самым простым способом постинг текста в твиттер с помощью PHP скрипта.

Немного порывшись попал на dev[dot]twitter[dot]com

Покрутив немного выбрал codebird-php . Простая настройка, возможность постить изображение. Ссылка на него. Написал скрипт какой-то такой у меня вышел в итоге:
PHP:
скопировать код в буфер обмена
  1.  
  2.                 require_once(CODEBIRD);
  3.  
  4.                 \Codebird\Codebird::setConsumerKey(APIKEY,APISECRET);
  5.                 $cb = \Codebird\Codebird::getInstance();
  6.                 $cb->setToken(ACCTOKEN,TOKENSECRET);
  7.                
  8.                 $params = array(
  9.                           'status' => $text
  10.                         );
  11.                
  12.                 $reply = $cb->statuses_update($params);
  13.  

Естественно CODEBIRD , APIKEY , APISECRET , ACCTOKEN , TOKENSECRET мои константы. Всё ок, скрипт работает, но есть проблема. Картинка постится нормально, латиница тоже. Все буквы кириллицей превращаются в ромбики с вопросами. То есть, как я понял, в процессе постинга изменяется шрифт и его у меня просто нет.

Вопрос. Уважаемые гуру, что вы можете посоветовать? Прав ли я в своих догадках и как можно повлиять на шрифт? Если есть какой-то другой метод - выслушаю с радостью. Только просьба подробнее объяснять, чтобы я понимал о чём речь, ибо только учусь. И я никакую CMS не использую, скрипт запускаю со своего компа. Всем спасибо за ответы!
 
 Top
Sail
Отправлено: 19 Сентября, 2014 - 08:25:25
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Nikita aka Dingo пишет:
Все буквы кириллицей превращаются в ромбики с вопросами. То есть, как я понял, в процессе постинга изменяется шрифт и его у меня просто нет.

Быть может, надо текст в utf-8 преобразовывать?
 
 Top
Nikita aka Dingo
Отправлено: 19 Сентября, 2014 - 09:25:31
Post Id



Новичок


Покинул форум
Сообщений всего: 54
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)

[+]


Похоже на проблему со шрифтом, а не с кодировкой. Если была бы проблема с кодировкой, твиттер бы реагировал по-другому.
 
 Top
Nikita aka Dingo
Отправлено: 20 Сентября, 2014 - 11:41:53
Post Id



Новичок


Покинул форум
Сообщений всего: 54
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)

[+]


Огорчение В общем, похоже я чего-то не то написал, и тут люди просто ленятся мне объёснять прописные истины. Если я прав, то хотя бы подскажите вектор, куда мне копать, что читать. Спасибо!
 
 Top
Sail
Отправлено: 22 Сентября, 2014 - 11:21:32
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Nikita aka Dingo, какая кодировка у Вас в проекте используется?
Если отличная от UTF-8, то попробуйте текст перед скармливанием методам того класса пропустить через функцию iconv()
 
 Top
Nikita aka Dingo
Отправлено: 23 Сентября, 2014 - 06:38:28
Post Id



Новичок


Покинул форум
Сообщений всего: 54
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)

[+]


Да, все оказались правы, проблема была у меня. Это у меня кодировки на текстах были отличными от кодировок в скриптах. Начал исследовать iconv() и близкие к нему функции и нашёл. Всем спасибо, тему можно закрывать! Понажимал бы всем "Спасибы", но у меня сообщений мало для этого Недовольство, огорчение

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

Ан нет, погорячился. Короч суть такая. Скрипт кодировка ANSII, тексты в twitter из txt файла берутся. Первый текст норм разместился, а второй уже поплыл и кодировка в блокноте после того, как я извлёк оттуда строку - тоже. Выходит, мне в скрипте нужно строку из ANSII преобразовать в utf-8? И как это реализовать всё правильно? Спасибо!

(Отредактировано автором: 23 Сентября, 2014 - 08:05:24)

 
 Top
Мелкий Супермодератор
Отправлено: 23 Сентября, 2014 - 10:07:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Nikita aka Dingo пишет:
мне в скрипте нужно строку из ANSII преобразовать в utf-8?

Выполнено по определению.
UTF8 полностью и неизменно включает в себя ASCII (которую какие-то идиоты обзывают ANSI - что есть стандартизирующая организация, а не кодировка. Кодировка - это принятый стандарт ANSI X3.4).


-----
PostgreSQL DBA
 
 Top
Sail
Отправлено: 23 Сентября, 2014 - 10:16:47
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Nikita aka Dingo пишет:
тексты в twitter из txt файла берутся

Вот этот txt файл в какой кодировке?
Быть может, его сразу можно в utf-8 формировать?
Ну или приведите участок кода, читающий из txt и формирующий массив параметров для метода из codebird
 
 Top
Nikita aka Dingo
Отправлено: 23 Сентября, 2014 - 17:18:47
Post Id



Новичок


Покинул форум
Сообщений всего: 54
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)

[+]


Sail, ну я написал, перед стартом скрипта все txt файлы перегоняю в utf-8 руками. После запускаю скрипт, он всё нормально берёт, когда идёт перезапись кодировка слетает.

PHP:
скопировать код в буфер обмена
  1.  
  2. function get_one_string($ids,$round){
  3.  
  4.         switch ($ids){
  5.                 case 0:$name='texts\trollz.txt';break;
  6.                 case 1:$name='texts\news.txt';break;
  7.                 case 2:$name='texts\musor.txt';
  8.         }
  9. $textarray=explode("\r\n",file_get_contents($name));
  10.         $nstring = array_shift($textarray);
  11.         $saves=implode("\r\n",$textarray);
  12.         file_put_contents($name,$saves);
  13.         if (($round%rand(3,5))==0){
  14.                 $string_arr = explode(" ", $nstring);
  15.                 $index_array = array();
  16.                 $index=1;
  17.                 for ($i=0;$i<count($string_arr);$i++){
  18.                                 if ((preg_match('/#/',$string_arr[$i])) OR (strlen($string_arr[$i])<4)){}
  19.                                 else {
  20.                                                 $index_array[$index]=$i;
  21.                                                 $index=$index+1;
  22.                                                 }
  23.                                 }
  24.                 $rand=rand(1,count($index_array));
  25.                 $index=$index_array[$rand];
  26.                 if (!in_array($string_arr[$index][0], array('"','\'','`','-','«'))) {
  27.                                                                                 $string_arr[$index] = '#'.$string_arr[$index];
  28.                                                                                 }
  29.                                         else
  30.                                                 {
  31.                                                         $quote_sign = $string_arr[$index][0];
  32.                                                         $string_arr[$index][0]='#';
  33.                                                         $string_arr[$index] = $quote_sign.$string_arr[$index];
  34.                                                 }
  35.                 $nstring=implode(" ", $string_arr );
  36.                 unset ($string_arr,$index_array,$rand,$index);
  37.         }
  38.         return $nstring;
  39. }
  40.  

Если что-то где-то написал не так - подскажите, пожалуйста. Спасибо!
 
 Top
Sail
Отправлено: 24 Сентября, 2014 - 09:48:49
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Nikita aka Dingo пишет:
$string_arr[$index][0]

Плохая идея использовать такой доступ к элементу строки в мультибайтовой кодировке.
Для этой цели существуют специальные функции. Например:
PHP:
скопировать код в буфер обмена
  1. $enc = 'utf-8';
  2. $sFirstChar = mb_substr($string_arr[$index], 0, 1, $enc);
  3. if (!in_array($sFirstChar, array('"','\'','`','-','«'))) {
  4.   $string_arr[$index] = '#'.$string_arr[$index];
  5. } else {
  6.   $string_arr[$index] = $sFirstChar.'#'.mb_substr($string_arr[$index], 1, mb_strlen($string_arr[$index], $enc) - 1, $enc);
  7. }
  8.  
.
Ну и strlen(), конечно-же вернёт количество байт, а не символов в такой строке Улыбка

(Отредактировано автором: 24 Сентября, 2014 - 09:50:18)

 
 Top
Nikita aka Dingo
Отправлено: 08 Октября, 2014 - 13:39:05
Post Id



Новичок


Покинул форум
Сообщений всего: 54
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)

[+]


Век живи век учись... пытаюсь всё осознать...))) Что получится - отпишу. Спасибо!
PHP:
скопировать код в буфер обмена
  1. Fatal error: Call to undefined function mb_substr()

(Отредактировано автором: 08 Октября, 2014 - 14:32:12)

 
 Top
Nikita aka Dingo
Отправлено: 11 Октября, 2014 - 06:19:03
Post Id



Новичок


Покинул форум
Сообщений всего: 54
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)

[+]


Nikita aka Dingo пишет:
Век живи век учись... пытаюсь всё осознать...))) Что получится - отпишу. Спасибо!
PHP:
скопировать код в буфер обмена
  1. Fatal error: Call to undefined function mb_substr()


Короче принцип я осознал. Но как-то не могу найти ошибки в коде... Большую часть поисправлял и всё нормально. Но осталась где-то треть, где вопросики.... буду искать...
 
 Top
Nikita aka Dingo
Отправлено: 22 Октября, 2014 - 14:18:08
Post Id



Новичок


Покинул форум
Сообщений всего: 54
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)

[+]


Мало ли кому пригодится. Короче решается до банального просто. Я видать запутал всех своим скриптом. Я его переписал с нуля и всё осталось такое же по смыслу, но строку, перед размещением, я преобразовывал вот так
PHP:
скопировать код в буфер обмена
  1. $result=iconv("Windows-1251", "UTF-8", $result);

И всё работает.
 
 Top
Sail
Отправлено: 22 Октября, 2014 - 14:24:46
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Nikita aka Dingo пишет:
Мало ли кому пригодится. Короче решается до банального просто. Я видать запутал всех своим скриптом. Я его переписал с нуля и всё осталось такое же по смыслу, но строку, перед размещением, я преобразовывал вот так
PHP:
скопировать код в буфер обмена
  1. $result=iconv("Windows-1251", "UTF-8", $result);

И всё работает.

Угу Радость
А теперь перечитайте несколько первых ответов в этой теме... Хорошо
 
 Top
Nikita aka Dingo
Отправлено: 22 Октября, 2014 - 17:47:25
Post Id



Новичок


Покинул форум
Сообщений всего: 54
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)

[+]


Sail пишет:

Угу Радость
А теперь перечитайте несколько первых ответов в этой теме... Хорошо

Не ну я ж "новичёк". Ты написал а я не понял нифига =) Как-то посидел, ковыряясь в классах в другом скрипте и тут меня "осенило". Плюсанул бы, конечно, если бы мог
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB