Как автоматически сохранять данные из URL в базу данных - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь создать ленту новостей. У меня есть построенный интерфейс Ember и встроенный интерфейс Rails API, и они общаются друг с другом. У меня есть feedsController, модель каналов и миграция, встроенные в бэкэнд. У меня есть данные, которые хранятся в моей базе данных и отображаются правильно на моем интерфейсе Ember с помощью фейера Достаточно просто. Я пытаюсь загрузить данные (название, изображение, автора и т. Д.) Из NewsApi - по ключевому слову - в мое приложение rails, сохранить их в моей базе данных, а затем отобразить на моем веб-интерфейсе. Как автоматически загрузить и сохранить эти данные в моем приложении rails? Я ищу автоматизированное решение - 1: загружать новости по ключевому слову, 2: сохранять в базу данных, 3: отображать. У меня ограниченный опыт работы с бэкэнд-проблемами, но я могу работать до конца. Я не вижу никаких учебников с этой конкретной проблемой, хотя. Если вы хотите увидеть мой код, я могу вставить его, но файлы по сути являются стандартными с вашим базовым индексом, создавать, уничтожать и т. Д. Я понимаю основы Rails, я просто не могу понять это , Заранее спасибо!

Редактировать - я добился определенного прогресса за последний день или около того. Теперь у меня есть данные, поступающие из newsapi, и я могу отображать их в localhost: 3000 / feeds. Моя модель:

class Feed < ActiveRecord::Base
 require 'rest_client'

  @url

  def self.getData
    response = RestClient.get(@url, { :content_type => :json })
  end

  def self.retrieve_results
    @url = "https://newsapi.org/v2/everything?q=marijuana&apiKey=#{ENV['NEWS_API_KEY']}"
    JSON.parse(Feed.getData)
  end
end  

И мой контроллер:

class FeedsController < ApplicationController
  before_action :set_feed, only: [:show, :create]

  def index
    @feeds = Feed.retrieve_results()
    render json: @feeds
    # redirect_to :action => 'create'  ??  Maybe?
  end

  def create

    I believe I need code here

  end

  private
    def set_feed
      @feed = Feed.find(params[:id])
    end

    def feed_params
      params.require(:feed).permit(:name, :summary, :url, :published_at, :guid)
    end
end  

Данные:

{
"status": "ok",
"totalResults": 6988,
"articles": [
{
"source": {
"id": "mashable",
"name": "Mashable"
},
"author": "Lacey Smith",
"title": "Cannabis may alter the genetic makeup of sperm",
"description": "A new study suggests that marijuana use can not only lower sperm count, but also affect sperm DNA. Read more... More about Marijuana, Cannabis, Sperm, Science, and Health",
"url": "https://mashable.com/video/cannabis-sperm-dna/",
"urlToImage": "https://i.amz.mshcdn.com/cdBWehMuVAb4DgU9flYo0lQTyT8=/1200x630/2019%2F01%2F16%2F18%2F1421dae3db754d0a8c4276e524b47f7f.23835.jpg",
"publishedAt": "2019-01-16T20:13:12Z",
"content": null
},
{
"source": {
"id": "the-new-york-times",
"name": "The New York Times"
},
"author": "ALEX BERENSON",
"title": "What Advocates of Legalizing Pot Don’t Want You to Know",
"description": "The wave toward legalization ignores the serious health risks of marijuana.",
"url": "https://www.nytimes.com/2019/01/04/opinion/marijuana-pot-health-risks-legalization.html",
"urlToImage": "https://static01.nyt.com/images/2019/01/04/opinion/04berenson/04berenson-facebookJumbo.jpg",
"publishedAt": "2019-01-05T02:14:00Z",
"content": "Meanwhile, legalization advocates have squelched discussion of the serious mental health risks of marijuana and THC, the chemical responsible for the drugs psychoactive effects. As I have seen firsthand in writing a book about cannabis, anyone who raises thos… [+1428 chars]"
},  

Теперь мне нужно пройтись по каждой ленте, извлечь правильную информацию (источник, автор, заголовок, описание и т. Д. - в основном все) и сохранить ее в столбцах своей базы данных. Как автоматически сохранить эти данные при получении ответа от URL? Мне также нужен способ убедиться, что я сохраняю историю только один раз, и тогда GET & CREATE будет просто обновлять базу данных по мере поступления новых историй. Опять же, спасибо за любую помощь!

1 Ответ

0 голосов
/ 23 января 2019

Я не уверен, что понимаю вопрос. Вам нужно использовать что-то вроде fetch. Если вы используете fetch, он должен перенести вновь созданные данные в серверный рельс, если вы правильно настроили его. Использование POST - это ваше автосохранение. Вы упомянули попытку загрузки данных, но почему GET не работает? GET должен загрузить данные, а POST должен опубликовать и сохранить данные. Я из React и Redux, но вы должны иметь возможность использовать что-то вроде axios, чтобы упростить настройку. Дайте мне знать, если я не ответил на ваш вопрос.

...