1

长期潜伏者,第一次提问者。请原谅任何错别字,因为我在喝咖啡和打字准确性之间存在反比关系。

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

这个应用程序的目标是相当温和的:

  1. 用户应该能够简单地单击一个框,该框将打开一个对话框来选择他们硬盘上的文件并将其上传到云端(我已经选择了 dropbox,稍后会详细介绍)
  2. 上传者应该只接受特定的文件扩展名。
  3. 用户应该能够浏览并能够下载所述文件。
  4. 该应用程序应该能够检测洪水尝试,并且在理想情况下能够检测到哪个 facebook 用户正在上传它们。(这是对我的编码“技能”的悲哀控诉,即这个目标的后半部分是一个延伸目标)。
  5. 理想情况下,用户应该能够将文件从云移动到云,以及从云移动到磁盘。这没那么重要。

好的,既然我已经为我的巨著制定了目标,我将跟进我所在的位置,然后谦卑地接近溢出之神寻求指导。

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

在此之后,我开始在网上寻找简单的 Python 文件上传器。搜索后,我在 DropBox 开发网站上找到了这段代码。所以我注册了一个保管箱 SDK,并且不得不通过这个http://pypi.python.org/pypi/setuptools安装“设置工具” 我使用了 ez_setup.py 并简单地运行了似乎通过“setuptools 模块”未找到错误。

我已经发布了下面的代码。

# 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 大发雷霆。

4

2 回答 2

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 所做的网页的身份验证,但这是一般要点。

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

于 2012-09-18T12:58:30.203 回答
0

对 ErrorResponse 的响应:[401] u'Token is disabled or invalid' 在我的代码中得到了同样的结果

来自 Dropbox API: 在令牌不再被授权的情况下,REST API 将返回 HTTP 错误 401 Unauthorized 响应

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

于 2013-01-11T17:39:48.060 回答