0

現在、education.com API からデータにアクセスしようとしています。しかし、私はまだそうすることができません。

基本的に、私が理解していることから、この python スクリプトを使用して、ブラウザーのクロスドメイン制限を抑制することになっています。Python スクリプトは getData.py と呼ばれ、次のコードを使用しています。逐語的に:

#!/usr/bin/python 

# Import modules for CGI handling 
import cgi, cgitb 
import urllib2 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

#download data from request parameter 'url' 
print "Content-type:text/xml\r\n\r\n" 
url = form.getvalue("url") 
callback = form.getvalue("callback")
req = urllib2.Request(url) 
response = urllib2.urlopen(req) 
data = response.read() 
print callback + "(" + data+ ")"

次に、$.getJSON を介して JavaScript/jQuery コードで Python スクリプトを呼び出す必要があります。私の教授は、教育 API の URL と、このスクリプトへのコールバックを渡す必要があると言いました。どうやってこれを行うのかわかりません。どうすればいいですか?コールバックとは何ですか? これは私のjqueryコードです。プライバシー保護のため、URL からキーを削除しました。mykeyという単語に置き換えられます。

$.getJSON("getData.py", { url: "http://api.education.com/service/service.php?
f=schoolSearch&key=mykey&sn=sf&v=4&city=Atlanta&state=ga&Re
sf=json"}, function(data) {  
console.log(data);
});
});
4

1 に答える 1

0

取得したデータを json としてシリアル化します。

#!/usr/bin/python 

# Import modules for CGI handling 
import cgi, cgitb 
import urllib2 
import json

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

#download data from request parameter 'url' 
print "Content-type:text/javascript\r\n\r\n" 
url = form.getvalue("url") 
callback = form.getvalue("callback")
req = urllib2.Request(url) 
response = urllib2.urlopen(req) 
try:
    data = response.read() 
    print callback + "(" + json.dumps(data)+ ")"
finally:
    response.close()

callback=?url に含めます。( http://api.jquery.com/jQuery.getJSON/ )

<html>
    <head>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
        <script type="text/javascript">
            var jsonp_url = "cgi-bin/getData.py";
            var url = "http://api.education.com/service/service.php?f=schoolSearch&key=mykey&sn=sf&v=4&city=Atlanta&state=ga&Resf=json";
            $.getJSON(jsonp_url + '?callback=?', {
                url: url
            }, function(data) {
                console.log(data);
                $('body').text(data);
            });
        </script>
    </head>

    <body>
    </body>
<html>
于 2013-06-20T03:11:26.517 に答える