2016-04-02 60 views
0

我已经开始创建一个流星应用程序,并且我想在我使用后台任务定义的mongoDB集合之一中插入文档。Meteor/python/mongoDB - 如何从后台运行进程更新mongoDB?

想一想,例如,我每天都在阅读RSS feed并为网站搜集新闻标题。

要求

  1. 阅读RSS提要,并刮去必要的网站。
  2. 将新标题放入流星应用程序使用的mongoDB集合中。

我知道什么

我知道该怎么做1.使用python,与requests和其他库。 我知道如何通过javascript在流星中将信息添加到集合中,但通过遵循todo示例应用程序教程,通过后台任务执行而不是

可能的解决方案

  1. 获取蟒蛇的数据,然后通过该蟒蛇数据添加到MongoDB的集合。然后这将在某种后台进程上运行在服务器上。
  2. 使用某种流星库,允许我运行后台任务和webscraping,然后我可以使用它来更新集合。

最小的例子是从this step of the todo app

步骤我要自动化:

meteor mongo 
db.tasks.insert({ text : 'New title' , createdAt: new Date() }); 

其中New title是一些报废/ RSS馈送的结果。

达到此目的的最佳方法是什么?我在Python中相当流利,但对JS和流星来说是全新的。

其他意见

而且,我还没有在下面这个例子中包括这一点,但我也想用accounts-uiaccounts-password包,将删除insecure包。不知道这是如何影响后台进程的实现的。

小例子

(对不起,如果这是不是很小,但不知道如何使它更小)

  • 客户
    • 为主。HTML
    • main.jsx
  • 服务器
    • main.js
  • 进口
    • API
      • tasks.js
    • UI
      • App.jsx
      • Task.jsx

客户机/ main.html中

<head> 
    <title>Todo List</title> 
</head> 
<body> 
    <div id='render-target'></div> 
</body> 

客户端/ main.jsx

import React from 'react';                 
import { Meteor } from 'meteor/meteor'; 
import { render } from 'react-dom'; 

import App from '../imports/ui/App.jsx'; 

Meteor.startup(() => { 
    render(<App/> , document.getElementById('render-target')); 
}); 

服务器/ main.js

import '../imports/api/tasks.js' 

进口/ API/tasks.js

import { Mongo } from 'meteor/mongo';              

export const Tasks = new Mongo.Collection('tasks'); 

进口/ UI/App.jsx

import React , { Component , PropTypes } from 'react';          
import { createContainer } from 'meteor/react-meteor-data'; 

import { Tasks } from '../api/tasks.js'; 

import Task from './Task.jsx'; 

class App extends Component { 

    renderTasks() { 
     return this.props.tasks.map((task) => (
      <Task key={task._id} task={task} /> 
     )); 
    } 

    render() { 
     return (
      <div className='container'> 
       <header> 
        <h1>Todo List</h1> 
       </header> 

       <ul> 
        { this. renderTasks() } 
       </ul> 
      </div> 
     ); 
    } 
} 

App.propTypes = { 
    tasks : PropTypes.array.isRequired, 
}; 

export default createContainer(() => { 
    return { 
     tasks : Tasks.find({}).fetch(), 
    }; 
} , App); 

进口/ UI/Task.jsx

import React, { Component , PropTypes } from 'react';          

// Task component - represents a single todo item 
export default class Task extends Component { 
    render() { 
     return (
      <li>{this.props.task.text}</li> 
     ); 
    } 
} 

Task.propTypes = { 
    // This component gets the task to display through a React prop. 
    // We can use propTypes to indicate it is required 
    task: PropTypes.object.isRequired, 
}; 

回答

1

不要在语言和工具刮插入你知道最好的,因为你提到python我认为这将是你的选择。 Pymongo可以很容易地将python字符写入mongo。

您可以运行您自己的mongo版本或访问默认版本。要获取连接字符串默认,cd到流星目录和类型:

$ meteor mongo -U 

它可能会像MongoDB的://127.0.0.1:3001 /流星。如果您使用自己的数据库中的活性成分的流星将每十秒钟(它投票)更新

db.insert({ 'text' : title , 'createdAt': datetime.datetime.utcnow()}) 

:那么,从蟒蛇连接到:

from pymongo import MongoClient 
connection = MongoClient("mongodb://127.0.0.1:3001/meteor")       
db = connection.meteor.tasks 

然后做插件。如果您使用默认设置,它将是即时的。

+0

你是上帝送来的!好吧,听起来像从Python做它是要走的路。我最后的问题是,从python这样做我不必担心认证等等?也就是说,在mongo中,您向客户端“发布”方法的相同方式是,我必须将某些内容发布到我的Python脚本中? – evan54

+0

我想通了。我只是能够独立于身份验证等插入项目的数据库。回想起来,这似乎很明显,因为我猜数据库本身没有验证任何东西 – evan54

+0

对不起,我没有回答!我只是注意到你的问题。 – sgbirch