Лучший способ получить обновленные результаты получения данных с веб-сайта с заданием cron - PullRequest
0 голосов
/ 07 мая 2019

Я создал простое мобильное приложение, используя React Native, и для источника данных я создал простой API в PHP, который извлекает данные с веб-сайта и предоставляет их пользователям.Теперь я хотел добавить функцию уведомлений в свое приложение, и для этого мне всегда нужно знать, какие данные были обновлены, я решил эту проблему, сохранив свои данные в двух разных таблицах в моей БД и затем сравнив изменения, что занимает много времени.процедура и не очень эффективная на мой взгляд.Весь мой предыдущий код был написан на чистом PHP без использования каких-либо фреймворков.Теперь я хотел внедрить весь свой проект в бэкэнд на основе Laravel и не знаю, как я могу достичь функциональности, значит получать обновленные данные и затем использовать эти данные для дальнейшей отправки уведомлений пользователям.

Сводка функциональностиЯ хочу: - проанализировать данные с веб-сайта - найти новые данные - если появятся новые данные, отправить уведомления - установить задание cron для повторения

Мой старый скрипт сравнения выглядит так:

<?PHP
include '../config/dbData.php';

// required headers
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");

$connect = mysqli_connect($HostName, $HostUser, $HostPass);
mysqli_select_db($connect, $DatabaseName);

mysqli_query($connect, "SET NAMES 'UTF8'") or die("ERROR: " . mysqli_error($connect));

$fetch3 = mysqli_query($connect, "SELECT * FROM timetable
                                    WHERE id NOT IN (SELECT id FROM TimetableStudentCompare)

                                    UNION

                                    SELECT * FROM TimetableStudentCompare
                                    WHERE id NOT IN (SELECT id FROM timetable)

                                    UNION

                                    SELECT * FROM timetable
                                    WHERE Vertreter NOT IN (SELECT Vertreter FROM TimetableStudentCompare)

                                    UNION

                                    SELECT * FROM TimetableStudentCompare
                                    WHERE Vertreter NOT IN (SELECT Vertreter FROM timetable)

                                    UNION

                                    SELECT * FROM timetable
                                    WHERE Std NOT IN (SELECT Std FROM TimetableStudentCompare)

                                    UNION

                                    SELECT * FROM TimetableStudentCompare
                                    WHERE Std NOT IN (SELECT Std FROM timetable)

                                    UNION

                                    SELECT * FROM timetable
                                    WHERE Klasse NOT IN (SELECT Klasse FROM TimetableStudentCompare)

                                    UNION

                                    SELECT * FROM TimetableStudentCompare
                                    WHERE Klasse NOT IN (SELECT Klasse FROM timetable)");

$array3 = array();
while ($row3 = mysqli_fetch_assoc($fetch3)) {
    $array3[] = $row3;
}
echo json_encode($array3, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);

// Fetching Klassen to a new array
$KlasseArray = array();

foreach ($array3 as $value) {
    array_push($KlasseArray, $value['Klasse']);
}
// array only with classes
print_r($KlasseArray);

//Removing Duplicates
$list = $KlasseArray;
sort($list);
foreach ($list as $k => $v) {
    if (isset($check)) {
        if ($check === $v) {
            unset($list[$k]);
        }
    }
    $check = $v;
}

$noDuplicate = array_values($list);
// Result klassen with no duplicates
print_r($noDuplicate);

mysqli_close($connect);

Может кто-нибудь помочь мне с этим?

1 Ответ

0 голосов
/ 07 мая 2019
  1. Для хранения следует использовать Обозреватель моделей, или, если вы хотите, пакет может быть Laravel Auditing . таким образом, вы можете избежать cron.

  2. Не следует устанавливать соединение с базой данных таким образом, что даже cron должен быть частью вашего приложения laravel без разделения, есть планировщик заданий, вы можете использовать его.

  3. Чтобы запустить планировщик заданий для обновления базы данных, вы можете определить команду ремесленника, которая должна содержать вашу логику для обновления вашей БД, и это также поможет вам в тестировании, так как вы можете просто запустить команду ремесленника и проверить запрос.

  4. Чтобы создать команду ремесленника

    php artisan make: команда YourTableUpdate

И класс будет сгенерирован в консоли / каталоге, как

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class YourTableUpdate extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'your-table:update';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Updates your table';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @param  
     * @return mixed
     */
    public function handle()
    {
        //logic to update your table
    }
}

Теперь для создания планировщика

В вашем App\Console\Kernel классе

<?php

namespace App\Console;

use Illuminate\Support\Facades\DB;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
    /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        App\Console\Commands\YourTableUpdate
    ];

    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        $schedule->command('your-table:update')->daily();
    }
}

вам нужно всего лишь добавить следующую запись Cron на ваш сервер.

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

Если вы используете SSH и у вас есть сервер Ubuntu, вы можете сделать что-то вроде

  1. sudo crontab -e
  2. Отредактируйте его, чтобы добавить запись cron.
  3. сохраните его и все готово.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...