2009-03-19 44 views

Trả lời

1

Tôi đang suy nghĩ về làm điều tương tự, nhưng tôi đã không đi qua bất cứ điều gì được nêu ra.

Tôi đang nghĩ về việc sử dụng JSON.net cho các dấu phẩy, vì vậy về cơ bản viết một dịch vụ REST trong GAE để khách hàng gọi và có thể OAuth.NET để xác thực (trừ khi tôi có thể tìm thấy cổng .NET của google one, tôi chưa xem được)

Silverlight về cơ bản chỉ là .NET, tho một phiên bản lite của nó, vì vậy nếu bạn có thể tìm thấy mã .NET để làm điều gì đó, nó sẽ hoạt động, ít nhất là một chút, trong SL:)

Nhưng điều đó càng xa càng tốt - hãy nghĩ về điều đó. Rất tiếc, bạn chưa thể trợ giúp thêm!

-3

Tải về bản demo cho Expression Blend. Kiểm tra hướng dẫn đi kèm để cho biết cách tạo giao diện Silverlight tuyệt đẹp trong chế độ GUI và tích hợp nó với dịch vụ web tìm kiếm Bing. Thao tác ví dụ này thành một ví dụ của Google nên tầm thường. Chúc may mắn! :)

+1

Tôi không nghĩ API Bling có nhiều điểm chung với GAE –

2

Đây là cách tiếp cận của tôi dựa chủ yếu vào Scott Seely's post Đơn giản chỉ cần gửi XML xung quanh, .xap cũng được cung cấp bởi GAE. Tôi chỉ làm việc này ngày hôm qua vì vậy nó vẫn đang hoạt động.

Google:

app.yaml

application: wowbosscards 
version: 1 
runtime: python 
api_version: 1 

handlers: 
- url: /WowBossCards.html 
    static_files: WowBossCards.html 
    upload: WowBossCards.html 
    mime_type: text/html 
- url: /clientaccesspolicy.xml 
    static_files: clientaccesspolicy.xml 
    upload: clientaccesspolicy.xml 
    mime_type: text/xml 
- url: /WowBossCards.xap 
    static_files: WowBossCards.xap 
    upload: WowBossCards.xap 
    mime_type: application/x-silverlight-app 
- url: .* 
    script: wowbosscards.py 

wowbosscards.py

#!/usr/bin/env python 

import cgi 
import datetime 
import wsgiref.handlers 
import os 
import logging 
import string 
import urllib 

from google.appengine.ext import db 
from google.appengine.api import users 
from google.appengine.ext import webapp 
from google.appengine.ext.webapp import template 

class Xml(db.Model): 
    xmlContent = db.TextProperty() 
    date = db.DateTimeProperty(auto_now_add=True) 


class XmlCrud(webapp.RequestHandler): 
    def get(self, xmlType): 

    xmlKey = string.capitalize(xmlType) 
    xml = Xml.get_by_key_name(xmlKey) 
    self.response.headers['Content-Type'] = "application/xml" 

    self.response.out.write(xml.xmlContent) 

    def post(self, xmlType): 

    logging.debug("XmlCrud POST") 
    xmlKey = string.capitalize(xmlType) 
    xml = Xml.get_by_key_name(xmlKey) 
    if len(self.request.get('content')) > 0 : 
     xml.xmlContent = self.request.get('content') 
    else: 
     xml.xmlContent = self.request.body 
    xml.put() 

    self.redirect('/upload/' + xmlType) 


def main(): 
    Xml.get_or_insert("Bosses", xmlContent="<a>Bosses go here</a>") 
    Xml.get_or_insert("Dungeons", xmlContent="<a>Dungeons go here</a>") 
    application = webapp.WSGIApplication([ 
              (r'/xml/(.*)', XmlCrud), 
             ], debug=True) 
    wsgiref.handlers.CGIHandler().run(application) 


if __name__ == '__main__': 
    main() 

Silverlight:

private class RequestExtended 
{ 
    public VoidCall CallBack; 
    public WebRequest Request; 
    public Uri Host; 

    public RequestExtended(WebRequest request, VoidCall callBack, Uri host) 
    { 
     Request = request; 
     CallBack = callBack; 
     Host = host; 
    } 
} 

public static void ImportFromGoogle(Uri host, VoidCall callBack) 
{ 
    try 
    { 
     if (host.Host == "localhost") 
     { 
      host = new Uri(host.Scheme + @"://" + host.Host + ":8080"); 
     } 
     var bossesCrud = new Uri(host, "/xml/bosses"); 
     var bossesRequest = WebRequest.Create(bossesCrud); 
     bossesRequest.BeginGetResponse(BossesResponse, new RequestExtended(bossesRequest, callBack, host)); 
    } 
    catch (Exception ex) 
    { 

    } 
} 

public static void BossesResponse(IAsyncResult result) 
{ 
    var requestExtended = result.AsyncState as RequestExtended; 
    try 
    { 
     WebResponse response = requestExtended.Request.EndGetResponse(result); 
     Stream responseStream = response.GetResponseStream(); 

     byte[] bytes = new byte[response.ContentLength]; 
     responseStream.Read(bytes, 0, bytes.Length); 
     responseStream.Close(); 

     var enc = new System.Text.UTF8Encoding(); 
     string xml = enc.GetString(bytes, 0, bytes.Length); 

     bosses = GetCollectionFromXmlString<BossCollection>(xml); 

     if (requestExtended.CallBack != null) requestExtended.CallBack(); 
    } 
    catch (WebException we) 
    { 
     HttpWebResponse response = (HttpWebResponse)we.Response; 
     response.Close(); 
    } 
    catch (Exception e) 
    { 
    } 
} 




public static void SaveBossesToGoogle(Uri host) 
{ 
    if (host.Host == "localhost") 
    { 
     host = new Uri(host.Scheme + @"://" + host.Host + ":8080"); 
    } 
    var bossesCrud = new Uri(host, "/xml/bosses"); 
    var request = WebRequest.Create(bossesCrud); 
    request.Method = "POST"; 
    request.ContentType = "text/xml"; //"application/x-www-form-urlencoded"; 

    request.BeginGetRequestStream(GetSaveBossesRequestStreamCallback, new RequestExtended(request, null, host)); 
} 

static void GetSaveBossesRequestStreamCallback(IAsyncResult result) 
{ 
    var requestExtended = result.AsyncState as RequestExtended; 
    try 
    { 
     Stream stream = requestExtended.Request.EndGetRequestStream(result); 
     var xmlSerializer = new XmlSerializer(typeof(BossCollection)); 
     var xmlText = new StringBuilder(); 

     using (TextWriter textWriter = new StringWriter(xmlText)) 
     { 
      xmlSerializer.Serialize(textWriter, Store.Bosses); 
      textWriter.Close(); 
     } 

     var enc = new System.Text.UTF8Encoding(); 
     var bytes = enc.GetBytes(xmlText.ToString()); 

     stream.Write(bytes, 0, bytes.Length); 
     stream.Close(); 
     requestExtended.Request.BeginGetResponse(SaveResponse, requestExtended); 
    } 
    catch (WebException we) 
    { 
     HttpWebResponse response = (HttpWebResponse)we.Response; 
     response.Close(); 
    } 
} 


static void SaveResponse(IAsyncResult result) 
{ 
    var requestExtended = result.AsyncState as RequestExtended; 
    try 
    { 
     WebResponse response = requestExtended.Request.EndGetResponse(result); 
     if (requestExtended.CallBack != null) requestExtended.CallBack(); 
    } 
    catch (WebException we) 
    { 
     HttpWebResponse response = (HttpWebResponse)we.Response; 
     response.Close(); 
    } 
} 
1

Tôi không thể tìm thấy bất kỳ ví dụ nào về việc sử dụng Silverlight để làm việc với SDK Java của ứng dụng Google, do đó, here is my post.