试图构建简单的文件上传者facebook应用程序

时间:2012-09-18 07:19:56

标签: python facebook dropbox dropbox-api uploader

很长一段时间潜伏着,第一次问问问题。请原谅任何拼写错误,因为我的咖啡消费和打字准确度之间存在反比关系。

我要做的是为粉丝facebook页面创建一个简单的上传应用程序。我决定用Python编写它,因为它是我所知道的唯一语言,并且得到了FB Dev的支持。

此应用程序的目标非常适中:

  1. 用户应该只需点击一个可以打开对话框的框,在硬盘上选择一个文件并将其上传到云端(我已经确定了Dropbox,稍后会详细介绍)
  2. 上传者应该只接受特定的文件扩展名。
  3. 用户应该能够浏览并能够下载所述文件。
  4. 应用程序应该能够检测洪水尝试,并且在理想的世界中能够检测哪个Facebook用户正在上传它们。 (这是对我的编码“技能”的悲伤起诉,这个目标的后半部分是一个伸展目标)。
  5. 用户应该能够理想地将文件云移动到云,以及云到磁盘。这并不重要。
  6. 好了,所以现在我已经为我的巨着作出了目标,我会跟着我所处的位置,然后羞辱接近溢出的神来寻求指导。

    首先,我在Heroku上创建了一个帐户,并在那里创建了应用程序。它基本上就坐在那里,没有任何代码。

    在此之后,我开始在网上查找简单的Python文件上传器。搜索后,我在DropBox开发站点上找到了这段代码。所以我通过注册获取Dropbox SDK,并且必须通过此http://pypi.python.org/pypi/setuptools安装“设置工具” 我使用了ez_setup.py并简单地运行了似乎超出了“setuptools module”找不到的错误。

    我发布了以下代码。

    # Include the Dropbox SDK libraries
    from dropbox import client, rest, session
    
    # Get your app key and secret from the Dropbox developer website
    APP_KEY = 'xxxxxetc.'
    APP_SECRET = 'xxxxxetc.'
    
    # ACCESS_TYPE should be 'dropbox' or 'app_folder' as configured for your app
    ACCESS_TYPE = 'dropbox'
    
    sess = session.DropboxSession(APP_KEY, APP_SECRET, ACCESS_TYPE)
    
    request_token = sess.obtain_request_token()
    
    # Make the user sign in and authorize this token
    url = sess.build_authorize_url(request_token)
    print "url:", url
    print "Please authorize in the browser. After you're done, press enter."
    raw_input()
    
    # This will fail if the user didn't visit the above URL and hit 'Allow'
    access_token = sess.obtain_access_token(request_token)
    
    client = client.DropboxClient(sess)
    print "linked account:", client.account_info()
    
    f = open('working-draft.txt')
    response = client.put_file('/magnum-opus.txt', f)
    print "uploaded:", response
    
    folder_metadata = client.metadata('/')
    print "metadata:", folder_metadata
    
    f, metadata = client.get_file_and_metadata('/magnum-opus.txt',rev='362e2029684fe')
    out = open('magnum-opus.txt', 'w')
    out.write(f.read())
    print(metadata)
    

    此后我遇到了错误

    Traceback (most recent call last):
      File "F:/Python27/FAUploader (Roaring-gorge)/Roaringgorge101", line 2, in <module>
        from dropbox import client, rest, session
      File "F:\Python27\dropbox\__init__.py", line 3, in <module>
        from . import client, rest, session
      File "F:\Python27\dropbox\client.py", line 52, in <module>
        from .rest import ErrorResponse, RESTClient
      File "F:\Python27\dropbox\rest.py", line 8, in <module>
        import pkg_resources
    ImportError: No module named pkg_resources
    

    我开始有点担心这可能是朝错误的方向发展的。我不擅长编码,更糟糕的是寻求帮助。所以我现在要发布这个,然后我花了太长时间试图让我的问题太完美了。我真的很喜欢编码,如果你们能帮助我朝着正确的方向前进,我们将不胜感激。看起来每个人,即使是经验不足的人,都能比我更快地完成这些项目。

    这些是我一直在使用的网站/我一直在访问的网站

    https://www.dropbox.com/developers

    显然,我不允许发布更多超链接,因为我太贵了。 '-_-

    无论如何我离题了,任何帮助都会非常感激。

    编辑/进度报告

    所以我设法更新Python环境以克服上面帖子中描述的错误。然而,我只是成功地获得了一个让我更加困惑的新作品。

    Traceback (most recent call last):
      File "F:\Python27\FAUploader (Roaring-gorge)\Roaringgorge101", line 22, in <module>
        access_token = sess.obtain_access_token(request_token)
      File "build\bdist.win-amd64\egg\dropbox\session.py", line 205, in obtain_access_token
        response = self.rest_client.POST(url, headers=headers, params=params, raw_response=True)
      File "build\bdist.win-amd64\egg\dropbox\rest.py", line 260, in POST
        return cls.IMPL.POST(*n, **kw)
      File "build\bdist.win-amd64\egg\dropbox\rest.py", line 207, in POST
        post_params=params, headers=headers, raw_response=raw_response)
      File "build\bdist.win-amd64\egg\dropbox\rest.py", line 183, in request
        raise ErrorResponse(r)
    ErrorResponse: [401] u'Token is disabled or invalid'
    >>>
    

    我尝试使用DropBox直接查看应用程序中是否有任何可能对我有所帮助的东西,但代码,我的浏览器和Dropbox应用程序似乎都完全忽略了对方。

    再一次非常感谢。我想我可能会在一段时间内反对某些SQL。

2 个答案:

答案 0 :(得分:2)

执行设置工具脚本,如下所示

curl http://python-distribute.org/distribute_setup.py | python

这应该处理那个错误

  

ImportError:没有名为pkg_resources的模块

计划的其余部分听起来似乎应该工作,因为Heroku的免费软件包没有空间来容纳这些文件

  

一个理想的世界能够检测哪个Facebook用户正在上传它们

通过Facebook身份验证流http://developers.facebook.com/docs/authentication/进行身份验证,然后您可以使用

记录当前用户
https://graph.facebook.com/me?access_token=xxx

使用Facebook Python库像facepy

pip install facepy

就像

一样
from facepy import GraphAPI
graph = GraphAPI('your_access_token_goes_here')
graph.get('me')

这里缺少逻辑,例如像Dropbox这样的网页的auth,但这是一般的要点。

所以到目前为止一切看起来还不错,我认为你现在不在Facebook API检查阶段,因为这是一个Dropbox API问题和Python setuptools问题

答案 1 :(得分:0)

对ErrorResponse的回复:[401] u'Token被禁用或无效'在我的代码中得到了同样的东西

来自Dropbox API: 如果令牌不再被授权,REST API将返回HTTP错误401未经授权的响应

我复制了生成的链接并再次授权应用程序以使我的代码正常工作:)