2016-04-02 83 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