За последние 24 часа нас посетили 34888 программистов и 1752 робота. Сейчас ищут 874 программиста ...

Вк новости + из базы

Тема в разделе "PHP для новичков", создана пользователем Kela, 27 янв 2017.

  1. Kela

    Kela Активный пользователь

    С нами с:
    20 дек 2014
    Сообщения:
    84
    Симпатии:
    1
    Привет всем, возник вопрос реально смешать новости и вывести их по дате(вместе.)
    я получаю новости вк так
    Код (PHP):
    1.   $wall = file_get_contents("https://api.vk.com/method/wall.get?owner_id=-58395417&count=10&filter=owner&extended=1&v=5.62"); // Отправляем запрос
    2.   $wall = json_decode($wall); // Преобразуем JSON-строку в массив
    3.   $wall = $wall->response->items; // Получаем массив комментариев
    4.   for ($i = 0; $i < count($wall); $i++) {
    5.     echo "<p><b>".($i + 1)."</b>. <i>".$wall[$i]->text."</i><br /><span>".date("Y-m-d H:i:s", $wall[$i]->date)."</span></p>"; // Выводим записи
    Мне надо смешать с новостями из базы данных, и вывести их по порядку(дата).
    Реально ли? если да то как?
     
  2. anderstender

    anderstender Новичок

    С нами с:
    15 ноя 2016
    Сообщения:
    55
    Симпатии:
    25
    новости из базы в каком формате выбираются? по сути просто юзаешь array_merge для двух массивов

    потом прогоняешь через usort()
    дай код, который получает новости из базы
     
    Kela нравится это.
  3. Kela

    Kela Активный пользователь

    С нами с:
    20 дек 2014
    Сообщения:
    84
    Симпатии:
    1
    Спасибо большое.
    Код (PHP):
    1.     $connect_to_db = mysql_connect($db_host, $db_username, $db_password)
    2.     or die("Could not connect: " . mysql_error());
    3.     mysql_select_db($db_name, $connect_to_db)
    4.     or die("Could not select DB: " . mysql_error());
    5.     $qr_result = mysql_query("select * from " . $db_table_to_show)
    6.     or die(mysql_error());
    7.     while($data = mysql_fetch_array($qr_result)){
    8.     echo '<td>' . $data['short_story'] . '</td>';
    9.     echo '<td>' . $data['date'] . '</td>';
    10. }
     
  4. Kela

    Kela Активный пользователь

    С нами с:
    20 дек 2014
    Сообщения:
    84
    Симпатии:
    1
    Сделал так, но выводит всего по 1 новости. Подскажите)
    Код (PHP):
    1.     $db_host = 'localhost';
    2.     $db_name = '123';
    3.     $db_username = '123';
    4.     $db_password = '321';
    5.     $db_table_to_show = 'dle_post';
    6.     $connect_to_db = mysql_connect($db_host, $db_username, $db_password)
    7.     or die("Could not connect: " . mysql_error());
    8.     mysql_select_db($db_name, $connect_to_db)
    9.     or die("Could not select DB: " . mysql_error());
    10.     $qr_result = mysql_query("select * from " . $db_table_to_show)
    11.     or die(mysql_error());
    12.     while($data = mysql_fetch_array($qr_result)){
    13.     $date = $data['date'];
    14.     $array1 = array("text" => "{$data['short_story']}", "date" => "{$date}");
    15.     }
    16. mysql_close($connect_to_db);
    17.  
    18.   $wall = file_get_contents("https://api.vk.com/method/wall.get?owner_id=-58395417&count=10&filter=owner&extended=1&v=5.62"); // Отправляем запрос
    19.   $wall = json_decode($wall); // Преобразуем JSON-строку в массив
    20.   $wall = $wall->response->items; // Получаем массив комментариев
    21.   for ($i = 0; $i < count($wall); $i++) {
    22.     $dateVK = date('Y-m-d H:i:s', $wall[$i]->date);
    23.     $array2 = array("textVK" => "{$wall[$i]->text}", "dateVK" => "{$dateVK}");
    24.   }
    25.   $result = array_merge($array1, $array2);
    26.   print_r($result);
     
  5. anderstender

    anderstender Новичок

    С нами с:
    15 ноя 2016
    Сообщения:
    55
    Симпатии:
    25
    PHP:
    1. $aDBNews = [];
    2.  
    3.  
    4. while($data = mysql_fetch_array($qr_result)){
    5.     $data['date'] = strtotime($data['date']);
    6.     $aDBNews[] = $data;
    7. }
    8.  
    9. $aNews = array_merge($aDBNews, $wall);
    10.  
    11. usort($aNews, function($aItem1, $aItem2){
    12.     return (($aItem1['date'] < $aItem2['date']) ? -1 : (($aItem1['date'] == $aItem2['date']) ? 0 : 1)) ;
    13. });
    14.  
    15. foreach($aNews as $aItem){
    16.     //чототам с выводом
    17. }
    ну примерно так, код не тестил
     
    #5 anderstender, 27 янв 2017
    Последнее редактирование: 27 янв 2017
    Kela нравится это.
  6. Kela

    Kela Активный пользователь

    С нами с:
    20 дек 2014
    Сообщения:
    84
    Симпатии:
    1
    Вот код без array. Я убрал все. кроме того что было сначало. Вставил ваш код
    Parse error: syntax error, unexpected '[' in /home/u30565/zoomcraft.ru/tests.php on line 27
    27 строка = $aDBNews = [];
    Код (PHP):
    1.     $db_host = 'localhost';
    2.     $db_name = '123';
    3.     $db_username = '123';
    4.     $db_password = '123';
    5.     $db_table_to_show = 'dle_post';
    6.     $connect_to_db = mysql_connect($db_host, $db_username, $db_password)
    7.     or die("Could not connect: " . mysql_error());
    8.     mysql_select_db($db_name, $connect_to_db)
    9.     or die("Could not select DB: " . mysql_error());
    10.     $qr_result = mysql_query("select * from " . $db_table_to_show)
    11.     or die(mysql_error());
    12.     while($data = mysql_fetch_array($qr_result)){
    13.     echo '<td>' . $data['short_story'] . '</td>';
    14.     echo '<td>' . $data['date'] . '</td>';
    15.     }
    16. mysql_close($connect_to_db);
    17.  
    18.   $wall = file_get_contents("https://api.vk.com/method/wall.get?owner_id=-58395417&count=10&filter=owner&extended=1&v=5.62"); // Отправляем запрос
    19.   $wall = json_decode($wall); // Преобразуем JSON-строку в массив
    20.   $wall = $wall->response->items; // Получаем массив комментариев
    21.   for ($i = 0; $i < count($wall); $i++) {
    22.     echo "<p><b>".($i + 1)."</b>. <i>".$wall[$i]->text."</i><br /><span>".date("Y-m-d H:i:s", $wall[$i]->date)."</span></p>"; // Выводим записи
    23.   }
     
  7. anderstender

    anderstender Новичок

    С нами с:
    15 ноя 2016
    Сообщения:
    55
    Симпатии:
    25
    ты немного не понял

    во первых насчет $wall
    преобразовываешь ты его не в массив, а в объект
    чтобы был массив делаешь так
    PHP:
    1. $wall=json_decode($wall, true);
    и дальше получаешь значения не так:
    PHP:
    1. $wall[$i]->text
    а так:
    PHP:
    1. $wall[$i]['text']
    в первом блоке ты получаешь список новостей из ВК $wall
    во втором блоке вместо
    PHP:
    1. while($data = mysql_fetch_array($qr_result)){
    2.     echo '<td>' . $data['short_story'] . '</td>';
    3.     echo '<td>' . $data['date'] . '</td>';
    4.     }
    ставишь мой код
    PHP:
    1. $aDBNews = [];
    2. while($data = mysql_fetch_array($qr_result)){
    3.     $data['date'] = strtotime($data['date']);
    4.     $aDBNews[] = $data;
    5. }
    $aDBNews тут это список новостей из базы
    если выскакивает ошибка syntax error, unexpected '[' in /home/u30565/zoomcraft.ru/tests.php on line 27
    значит $aDBNews = []; заменяешь на $aDBNews = array();

    далее по логике у нас есть 2 массива с новостям
    $wall и $aDBNews
    их нужно слить

    делаешь это одной строчкой
    PHP:
    1. $aNews=array_merge($aDBNews,$wall);
    $aNews это общий список новостей, еще не отсортирован
    затем нужно отсортировать новости
    также делается простой конструкцией
    PHP:
    1. usort($aNews, function($aItem1, $aItem2){
    2.    return (($aItem1['date'] < $aItem2['date']) ? -1 : (($aItem1['date'] == $aItem2['date']) ? 0 : 1)) ;
    3. });
    $aNews - отсортированный массив новостей

    далее делаешь тупо
    PHP:
    1. foreach($aNews as $aItem){
    2. echo '<p>' . $aItem['text'] . '</p>';
    3. }
    и всё заведется.
     
    Kela нравится это.
  8. Kela

    Kela Активный пользователь

    С нами с:
    20 дек 2014
    Сообщения:
    84
    Симпатии:
    1
    Пусто..Ничего не выводит
    Код (PHP):
    1.   $wall = file_get_contents("https://api.vk.com/method/wall.get?owner_id=-58395417&count=10&filter=owner&extended=1&v=5.62"); // Отправляем запрос
    2.   $wall=json_decode($wall, true);
    3.   $wall = $wall->response->items; // Получаем массив комментариев
    4.   for ($i = 0; $i < count($wall); $i++) {
    5.     echo "<p><b>".($i + 1)."</b>. <i>".$wall[$i]['text']."</i><br /><span>".date("Y-m-d H:i:s", $wall[$i]['date'])."</span></p>"; // Выводим записи
    6.   }
     
  9. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Код (Text):
    1.  mysql_fetch_array
    [​IMG]
     
    alexblack нравится это.
  10. Kela

    Kela Активный пользователь

    С нами с:
    20 дек 2014
    Сообщения:
    84
    Симпатии:
    1
    PHP:
    1. <?php
    2.     $db_host = 'localhost';
    3.     $db_name = '2';
    4.     $db_username = '2';
    5.     $db_password = '3';
    6.     $db_table_to_show = 'dle_post';
    7.     $connect_to_db = mysql_connect($db_host, $db_username, $db_password)
    8.     or die("Could not connect: " . mysql_error());
    9.     mysql_select_db($db_name, $connect_to_db)
    10.     or die("Could not select DB: " . mysql_error());
    11.     $qr_result = mysql_query("select * from " . $db_table_to_show . " ORDER BY date ASC") or die(mysql_error());
    12.     $aDBNews = array();
    13.     while($data = mysql_fetch_array($qr_result)){
    14.     $data['date'] = strtotime($data['date']);
    15.     $aDBNews[] = $data;
    16. }
    17. mysql_close($connect_to_db);
    18.  
    19.   $wall = file_get_contents("https://api.vk.com/method/wall.get?owner_id=-58395417&count=10&filter=owner&extended=1&v=5.62"); // Отправляем запрос
    20.   $wall=json_decode($wall, true);
    21.   $wall = $wall->response->items; // Получаем массив комментариев
    22.   for ($i = 0; $i < count($wall); $i++) {
    23.     echo "<p><b>".($i + 1)."</b>. <i>".$wall[$i]['text']."</i><br /><span>".date("Y-m-d H:i:s", $wall[$i]['date'])."</span></p>"; // Выводим записи
    24.   }
    25. $aNews=array_merge($aDBNews,$wall);
    26. usort($aNews, function($aItem1, $aItem2){
    27.    return (($aItem1['date'] < $aItem2['date']) ? -1 : (($aItem1['date'] == $aItem2['date']) ? 0 : 1)) ;
    28. });
    29. foreach($aNews as $aItem){
    30. echo '<p>' . $aItem['text'] . '</p>';
    31. }
    32. ?>
    Warning: array_merge() [function.array-merge]: Argument #2 is not an array in /home/u30565/zoomcraft.ru/tests.php on line 24

    Warning: usort() expects parameter 1 to be array, null given in /home/u30565/zoomcraft.ru/tests.php on line 27

    Warning: Invalid argument supplied for foreach() in /home/u30565/zoomcraft.ru/tests.php on line 28
     
  11. anderstender

    anderstender Новичок

    С нами с:
    15 ноя 2016
    Сообщения:
    55
    Симпатии:
    25
    а это:
    на это:
    PHP:
    1. $wall = $wall['response']['items'];
    Пушкин заменит?
     
    Kela нравится это.
  12. Kela

    Kela Активный пользователь

    С нами с:
    20 дек 2014
    Сообщения:
    84
    Симпатии:
    1
    Спасибо.
    нужно в другую сторону теперь.
    И возможно ли добавить
    цифру 1 в начале всех новостей с вк
    цифру 2 в начале всех новостей из бд?
     
  13. anderstender

    anderstender Новичок

    С нами с:
    15 ноя 2016
    Сообщения:
    55
    Симпатии:
    25
    нафига?
     
    Kela нравится это.
  14. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    блин, я прооффтоплю, но хочу заметить что сайтик хорош, для уровня minecraft.
     
  15. Kela

    Kela Активный пользователь

    С нами с:
    20 дек 2014
    Сообщения:
    84
    Симпатии:
    1
    1)Новые новости внизу списка у меня появляются.
    2)Хочу Картинки вставить VK - ВК, а для сайта домик. По этому хочу разделить
    --- Добавлено ---
    Спасибо, было бы лучше. если бы финансовые проблемы не настигли!
    Диз. Лаунчера)
    https://yadi.sk/i/Xj4e4MHh3AjBGH
     
  16. anderstender

    anderstender Новичок

    С нами с:
    15 ноя 2016
    Сообщения:
    55
    Симпатии:
    25
    перед:
    PHP:
    1. $aNews=array_merge($aDBNews,$wall);
    вставь такой код:
    PHP:
    1. $wall = array_map(function($aItem){
    2. $aItem['type'] = 2;
    3. return $aItem;
    4. }, $wall);
    5.  
    6. $aDBNews= array_map(function($aItem){
    7. $aItem['type'] = 1;
    8. return $aItem;
    9. }, $aDBNews);
    а там где выводишь все новости:
    PHP:
    1. foreach($aNews as $aItem){
    2. echo '<p>' . $aItem['text'] . '</p>';
    3. }
    просто добавь вывод $aItem['type'];

    и удали наконец этот код:
    PHP:
    1. for ($i = 0; $i < count($wall); $i++) {
    2.     echo "<p><b>".($i + 1)."</b>. <i>".$wall[$i]['text']."</i><br /><span>".date("Y-m-d H:i:s", $wall[$i]['date'])."</span></p>"; // Выводим записи
    3.   }
    он уже ненужен, весь вывод делай из общего списка
     
    Kela и denis01 нравится это.
  17. Kela

    Kela Активный пользователь

    С нами с:
    20 дек 2014
    Сообщения:
    84
    Симпатии:
    1
    Спасибо, было бы лучше. если бы финансовые проблемы не н
    Плюс с сайта не вывелись новости
    --- Добавлено ---
    скорее всего потому что в базе не text а short_story. Где изменить?
     
  18. anderstender

    anderstender Новичок

    С нами с:
    15 ноя 2016
    Сообщения:
    55
    Симпатии:
    25
    ты в этом коде напиши вывод новостей:
    PHP:
    1. foreach($aNews as $aItem){
    2. echo '<p>' . $aItem['text'] . '</p>';
    3. }
    у тебя же поле text есть только для контактовских новостей, для своих для этого юзай поле short_story
    тем более type уже указали
     
    Kela нравится это.
  19. Kela

    Kela Активный пользователь

    С нами с:
    20 дек 2014
    Сообщения:
    84
    Симпатии:
    1
    Ага. заработало. Только из вк не взялись последние новости. за 2017 год.
    +Надо перевернуть 2017 год новости внизу страницы.
    http://zoomcraft.ru/tests.php
    PHP:
    1. <?php
    2.     $db_host = 'localhost';
    3.     $db_name = '2';
    4.     $db_username = '3';
    5.     $db_password = '321';
    6.     $db_table_to_show = 'dle_post';
    7.     $connect_to_db = mysql_connect($db_host, $db_username, $db_password)
    8.     or die("Could not connect: " . mysql_error());
    9.     mysql_select_db($db_name, $connect_to_db)
    10.     or die("Could not select DB: " . mysql_error());
    11.     $qr_result = mysql_query("select * from " . $db_table_to_show . " ORDER BY date DESC limit 5") or die(mysql_error());
    12.     $aDBNews = array();
    13.     while($data = mysql_fetch_array($qr_result)){
    14.     $data['date'] = strtotime($data['date']);
    15.     $aDBNews[] = $data;
    16. }
    17. mysql_close($connect_to_db);
    18.  
    19.   $wall = file_get_contents("https://api.vk.com/method/wall.get?owner_id=-58395417&count=10&filter=owner&extended=1&v=5.62"); // Отправляем запрос
    20.   $wall=json_decode($wall, true);
    21.   $wall = $wall['response']['items'];
    22.  
    23.  
    24.   $wall = array_map(function($aItem){
    25. $aItem['type'] = 2;
    26. return $aItem;
    27. }, $wall);
    28. $aDBNews= array_map(function($aItem){
    29. $aItem['type'] = 1;
    30. return $aItem;
    31. }, $aDBNews);
    32.  
    33. $aNews=array_merge($aDBNews,$wall);
    34. usort($aNews, function($aItem1, $aItem2){
    35.    return (($aItem1['date'] < $aItem2['date']) ? -1 : (($aItem1['date'] == $aItem2['date']) ? 0 : 1)) ;
    36. });
    37. foreach($aNews as $aItem){
    38. echo $aItem['type'];
    39. echo '<p>' . $aItem['text'] . '</p>';
    40. echo '<p>' . $aItem['short_story'] . '</p>';
    41. $date = date("Y-m-d H:i:s", $aItem['date']);
    42. echo '<p>' . $date . '</p>';
    43. }
    44. ?>
     
  20. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    @Kela

    [​IMG]

    Когда в очередной раз будешь использовать mysql - просто помни это
     
    anderstender нравится это.
  21. anderstender

    anderstender Новичок

    С нами с:
    15 ноя 2016
    Сообщения:
    55
    Симпатии:
    25
    в функции сортировки
    там где usort поменяй местами -1 и 1 и порядок сортировки изменится
     
    Kela нравится это.
  22. Kela

    Kela Активный пользователь

    С нами с:
    20 дек 2014
    Сообщения:
    84
    Симпатии:
    1
    Ага спасибо. Получилось так
    PHP:
    1. <?php
    2.     $db_host = 'localhost';
    3.     $db_name = '2';
    4.     $db_username = '3';
    5.     $db_password = '4';
    6.     $db_table_to_show = 'dle_post';
    7.     $connect_to_db = mysql_connect($db_host, $db_username, $db_password)
    8.     or die("Could not connect: " . mysql_error());
    9.     mysql_select_db($db_name, $connect_to_db)
    10.     or die("Could not select DB: " . mysql_error());
    11.     $qr_result = mysql_query("select * from " . $db_table_to_show . " ORDER BY date DESC limit 5") or die(mysql_error());
    12.     $aDBNews = array();
    13.     while($data = mysql_fetch_array($qr_result)){
    14.     $data['date'] = strtotime($data['date']);
    15.     $aDBNews[] = $data;
    16. }
    17. mysql_close($connect_to_db);
    18.  
    19.   $wall = file_get_contents("https://api.vk.com/method/wall.get?owner_id=-58395417&count=10&filter=owner&extended=1&v=5.62"); // Отправляем запрос
    20.   $wall=json_decode($wall, true);
    21.   $wall = $wall['response']['items'];
    22.  
    23.  
    24.   $wall = array_map(function($aItem){
    25. $aItem['type'] = 2;
    26. return $aItem;
    27. }, $wall);
    28. $aDBNews= array_map(function($aItem){
    29. $aItem['type'] = 1;
    30. return $aItem;
    31. }, $aDBNews);
    32.  
    33. $aNews=array_merge($aDBNews,$wall);
    34. usort($aNews, function($aItem1, $aItem2){
    35.    return (($aItem1['date'] < $aItem2['date']) ? 1 : (($aItem1['date'] == $aItem2['date']) ? 0 : -1)) ;
    36. });
    37. foreach($aNews as $aItem){
    38. $date = date("Y-m-d H:i:s", $aItem['date']);
    39. echo $aItem['type'] . '&emsp;' . $aItem['text'] . $aItem['short_story'] . '<br>' . $date . '<br>';
    40. }
    41. ?>
     
  23. anderstender

    anderstender Новичок

    С нами с:
    15 ноя 2016
    Сообщения:
    55
    Симпатии:
    25
    Kela нравится это.
  24. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @anderstender надо ещё стрелку и кружком обвести, всё красным цветом :)
     
    Kela нравится это.
  25. Kela

    Kela Активный пользователь

    С нами с:
    20 дек 2014
    Сообщения:
    84
    Симпатии:
    1
    Еще вопросик закешировать.
    Нашел способ
    PHP:
    1. $cachefile = 'news.html';
    2. $cachetime = 18000;
    3.  
    4. // Обслуживается из файла кеша, если время запроса меньше $cachetime
    5. if (file_exists($cachefile) && time() - $cachetime < filemtime($cachefile)) {
    6.     include($cachefile);
    7.     exit;
    8. }
    9. ob_start(); // Запуск буфера вывода
    10. CODE
    11. $cached = fopen($cachefile, 'w');
    12. fwrite($cached, ob_get_contents());
    13. fclose($cached);
    14. ob_end_flush(); // Отправялем вывод в браузер
    Но выводит только новости сайта..