从覆盆子pi自动上传Dropbox?

时间:2015-11-30 18:09:33

标签: python raspberry-pi dropbox

我在我的覆盆子pi上使用github上的“Dropbox-Uploader”脚本在我的Dropbox帐户上传视频。

https://github.com/andreafabrizi/Dropbox-Uploader

它工作得很好,但现在我希望我的覆盆子pi在dropbox上自动上传视频。为此我写了python脚本

import os
path="/tmp/motion/"

def upload_files():
    if not os.path.exists(path):
        return
    os.stdir(path)
    for files in os.listdir("."):
        if files.endswith(".avi"):
            cmd = "/home/pi/dropbox_uploader.sh upload " + path + files
            os.system(cmd)
            os.system("sudo rm /tmp/motion/" + files)


if _name_ == "_main_":
    upload_files()

并将其设置为cronjob,但它不起作用,它不会在我的帐户上传任何内容。任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

我从许多不同的脚本编写脚本,最后它的工作很棒。 首先要安装的东西: - 你做一个完整的更新,升级 我现在还不知道所有不必要的步骤,但我会在这里写下来,你可以自己编辑 - 但它仍然可以工作,对你的设备没有任何伤害。

第1步

一步一步地将其复制+粘贴到您的终端:

sudo apt-get install python3-picamera
sudo apt-get install python3-pip
sudo apt-get install python-pip
pip3 install unicornhat
pip install unicornhat
sudo apt-get update
sudo apt-get upgrade -f
sudo apt-get upgrade
sudo apt-get install pip
sudo pip install dropbox

第2步

git clone https://github.com/andreafabrizi/Dropbox-Uploader.git

curl "https://raw.githubusercontent.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh" -o dropbox_uploader.sh

chmod +x dropbox_uploader.sh

./dropbox_uploader.sh

- 您还需要从Dropbox.com获取Accesstoken (https://www.dropbox.com/developers/apps

您需要注册一个帐户。

我不知道是否有必要,但你需要在MyApps中有一个文件, 并给它一个名字" Raspi-upload" +我的设置里面: 现状:发展 开发用户:只有你 权限类型:完整Dropbox 允许隐式授权:允许

- 然后你有你的KEY:

我认为您需要在步骤#2中使用此密钥,否则您只需要生成访问权限

在下一个TAB [Branding]上选择一个名称。

  • 每隔10秒拍摄一张照片,并将其上传到手机上的Dropbox应用程序。

  • 上传完成后,将删除拍摄的照片,因此您不会在SD卡上浪费空间。

这是脚本:####### TOP

#!/usr/bin/env python3.4

import dropbox
from dropbox.exceptions import ApiError, AuthError
import time
import datetime
import picamera
import sys, os
from time import sleep
import dropcamloop1

# Authorisation token
TOKEN = 'HERE IS YOUR ACCESS TOKEN'

# Format photo will be saved as e.g. jpeg
PHOTOFORMAT = 'jpeg'



# Create a camera object and capture image using generated filename
def camCapture(filename):
    with picamera.PiCamera() as camera:
        camera.resolution = (1920, 1080)
        print("Photo: %s"%filename + "." + PHOTOFORMAT)
        time.sleep(2)
        camera.capture(filename + '.' + PHOTOFORMAT, format=PHOTOFORMAT)



        print("Photo captured and saved ...")

        return filename + '.' + PHOTOFORMAT




# Generate timestamp string generating name for photos
def timestamp():
    tstring = datetime.datetime.now()
    print("Filename generated ...")
    return tstring.strftime("%Y%m%d_%H%M%S")
    #return tstring.strftime("image")


# Upload localfile to Dropbox
def uploadFile(localfile):

    # Check that access tocken added
    if (len(TOKEN) == 0):
        sys.exit("ERROR: Missing access token. "
                 "try re-generating an access token from the app console at dropbox.com.")

    # Create instance of a Dropbox class, which can make requests to API
    print("Creating a Dropbox object...")
    dbx = dropbox.Dropbox(TOKEN)

    # Check that the access token is valid
    try:
        dbx.users_get_current_account()
    except AuthError as err:
        sys.exit("ERROR: Invalid access token; try re-generating an "
                 "access token from the app console at dropbox.com.")

    # Specify upload path
    uploadPath = '/' + localfile

    # Read in file and upload
    with open(localfile, 'rb') as f:
        print("Uploading " + localfile + " to Dropbox as " + uploadPath + "...")

        try:
            dbx.files_upload(f.read(), uploadPath)
        except ApiError as err:
            # Check user has enough Dropbox space quota
            if (err.error.is_path() and
                    err.error.get_path().error.is_insufficient_space()):
                sys.exit("ERROR: Cannot upload; insufficient space.")
            elif err.user_message_text:
                print(err.user_message_text)
                sys.exit()
            else:
                print(err)
                sys.exit()



# Delete file
def deleteLocal(file):
    os.system("rm " + file)
    print("File: " + file + " deleted ...")



def main():

    # Generate name for file based on current time
    filename = timestamp()

    # Capture photo
    file = camCapture(filename)

    # Upload file
    uploadFile(file)

    # Delete local file
    deleteLocal(file)

    print("Done")
    #time.sleep(4)

    #x=0
    #while(x <4):
    #os.execv(sys.executable, ['/home/pi/Adafruit_Python_DHT/examples/dropcamloop1.py'])

if __name__ == '__main__':
    main()

    time.sleep(4)


    x=3
    while(x <4):
        #os.execv(sys.executable, [sys.executable] )
        execfile('dropcamloop.py')
    else:
        start ['dropcamloop1.py']
### END = dropcamloop1.py是同一个文件,名称不同。

如果您有任何疑问,我可以帮助您,但目的不是100%确定。