我已经开始创建一个流星应用程序,并且我想在我使用后台任务定义的mongoDB集合之一中插入文档。Meteor/python/mongoDB - 如何从后台运行进程更新mongoDB?
想一想,例如,我每天都在阅读RSS feed并为网站搜集新闻标题。
要求
- 阅读RSS提要,并刮去必要的网站。
- 将新标题放入流星应用程序使用的mongoDB集合中。
我知道什么
我知道该怎么做1.使用python,与requests
和其他库。 我知道如何通过javascript在流星中将信息添加到集合中,但通过遵循todo
示例应用程序教程,通过后台任务执行而不是。
可能的解决方案
- 获取蟒蛇的数据,然后通过该蟒蛇数据添加到MongoDB的集合。然后这将在某种后台进程上运行在服务器上。
- 使用某种流星库,允许我运行后台任务和webscraping,然后我可以使用它来更新集合。
最小的例子是从this step of the todo app。
步骤我要自动化:
meteor mongo
db.tasks.insert({ text : 'New title' , createdAt: new Date() });
其中New title
是一些报废/ RSS馈送的结果。
达到此目的的最佳方法是什么?我在Python中相当流利,但对JS和流星来说是全新的。
其他意见
而且,我还没有在下面这个例子中包括这一点,但我也想用accounts-ui
和accounts-password
包,将删除insecure
包。不知道这是如何影响后台进程的实现的。
小例子
(对不起,如果这是不是很小,但不知道如何使它更小)
- 客户
- 为主。HTML
- main.jsx
- 服务器
- main.js
- 进口
- API
- tasks.js
- UI
- App.jsx
- Task.jsx
- API
客户机/ 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,
};
你是上帝送来的!好吧,听起来像从Python做它是要走的路。我最后的问题是,从python这样做我不必担心认证等等?也就是说,在mongo中,您向客户端“发布”方法的相同方式是,我必须将某些内容发布到我的Python脚本中? – evan54
我想通了。我只是能够独立于身份验证等插入项目的数据库。回想起来,这似乎很明显,因为我猜数据库本身没有验证任何东西 – evan54
对不起,我没有回答!我只是注意到你的问题。 – sgbirch