我正在尝试构建一个用户可以输入文本的网站,该网站将通过javascript获取,然后发送到python函数,并将其发布到twitter。目前,python函数与本站的其余部分一起存储在本地。但是,我的AJAX并不太好,而且我遇到了一些问题。
我编写了AJAX代码,它使用推文向python函数发送POST请求,响应是整个python脚本。没有连接到我的脚本正在侦听的套接字。下面是AJAX函数和python脚本。有什么想法正在发生什么?
提前感谢您的帮助!
$(function(){
$('#PostTweet').on('click', function(e) {
var tweet = document.getElementById("theTweet").value;
var len = tweet.length;
if(len > 140){
window.alert("Tweet too long. Please remove some characters");
}else{
callPython(tweet);
}
});
});
function callPython(tweet){
window.alert("sending");
$.ajax({
type: "POST",
url: "tweet.py",
data: tweet,
success: function(response){
window.alert(response);
}
})
}
Python脚本:
from OAuthSettings import settings
import twitter
from socket import *
consumer_key = settings['consumer_key']
consumer_secret = settings['consumer_secret']
access_token_key = settings['access_token_key']
access_token_secret = settings['access_token_secret']
s = socket()
s.bind(('', 9999))
s.listen(4)
(ns, na) = s.accept()
def PostToTwits(data):
try:
api = twitter.Api(
consumer_key = consumer_key,
consumer_secret = consumer_secret,
access_token_key = access_token_key,
access_token_secret = access_token_secret)
api.PostUpdate(data)
makeConnection(s)
except twitter.TwitterError:
print 'Post Unsuccessful. Error Occurred'
def makeConnection(s):
while True:
print "connected with: " + str(na)
try:
data = ns.recv(4096)
print data
PostToTwits(data)
except:
ns.close()
s.close()
break
makeConnection(s)
答案 0 :(得分:0)
答案 1 :(得分:0)
您可以使用套接字完全编写一个简单的Web服务器,实际上您已经这样做了。但是,除了简单的练习之外,这种方法很快就会变得乏味。
例如,您的代码仅限于处理单个请求处理程序,这是您问题的核心。
帖子请求上的网址错误。在您的设置中,没有网址“tweet.py”的概念。如果你也在服务于jquery来自同一服务器的网页(但你不能),那网址实际上会有效。
您必须发布到“http://localhost:9999”,然后您可以获得所需的任何路径:“http://localhost:9999/foo”,“http://localhost:9999/boo”。只需确保首先从命令行运行python脚本,以便服务器正在监听。
get和post请求之间的区别也是HTTP协议的一部分,您的简单服务器对此一无所知。这主要意味着你在ajax请求中使用的动词无关紧要。您的服务器侦听所有HTTP谓词类型。
最后,我没有看到任何数据被返回给客户端。你需要做一些像ns.sendall(“Some response”)这样的事情。构建简单的http服务器的教程比比皆是,并显示了不同的发送响应方式。
答案 2 :(得分:0)
您需要一个网络服务器,以便您可以通过网络浏览器提出请求。
你可以使用像flask或django这样的web框架,也可以使用webpy。
使用网站上的webpy的简单示例
import web
urls = (
'/(.*)', 'hello'
)
app = web.application(urls, globals())
class hello:
def GET(self, name):
if not name:
name = 'World'
return 'Hello, ' + name + '!'
if __name__ == "__main__":
app.run()
然后你从javascript调用url(你的python函数)。