我正在寻找一种方法来从bing地图提供一些图像而不共享URL(因为它包含密钥)并将其返回给客户端(不先保存到磁盘)。我在here
中使用此方法def get_stream_from_url(url):
req = requests.get(url, stream = True)
return Response(stream_with_context(req.iter_content()), content_type = req.headers['content-type'])
我在另一种方法中使用它,在那里我生成一个包含那些图像的信息的列表,所以基本上我想将sream响应放在json中作为键url
的值:
def images_data_and_url(self, data):
results = []
for i in range(1, 13):
image = {}
description = data['description']
url = self.get_stream_from_url(data['url'])
tile = {"description": description
"url": url}
results.append(image)
print results
return json.dumps(results)
编辑: 如果我打印结果我有这个:
<type 'list'>: [{'description': ' this is an example', 'url': <Response streamed [200 OK]>}, {'description': ' this is an example', 'url': <Response streamed [200 OK]>} , {'description': ' this is an example', 'url': <Response streamed [200 OK]>}, {'description': ' this is an example', 'url': <Response streamed [200 OK]>}, {'description': ' this is an example', 'url': <Response streamed [200 OK]>}, {'description': ' this is an example', 'url': <Response streamed [200 OK]>}, {'description': ' this is an example', 'url': <Response streamed [200 OK]>}, {'description': ' this is an example', 'url': <Response streamed [200 OK]>},{'description': ' this is an example', 'url': <Response streamed [200 OK]>}, {'description': ' this is an example', 'url': <Response streamed [200 OK]>}, {'description': ' this is an example', 'url': <Response streamed [200 OK]>}, {'description': ' this is an example', 'url': <Response streamed [200 OK]>}]
如果我这样做,我会收到此错误
<Response streamed [200 OK]> is not JSON serializable
这是因为函数get_stream_from_url
返回一个响应:/我的问题是我不知道如何以另一种方式发送它?
在HTML中,我获取数据并为每个图像分配数据,如下所示:
<img class="image1 " data-description="The description" src="">
有人可以帮助我,如何对流进行编码,以便我可以像使用JSON数据一样发送它?
答案 0 :(得分:1)
Flask
对此有点矫枉过正。我创建了一个名为wsinfo
的库,可在此处找到:https://github.com/linusg/wsinfo。
有了它,代码就像:
import base64
import wsinfo
import sys
def html_image(data, content_type):
if sys.version.startswith("3"):
from io import BytesIO
f = BytesIO(data.encode())
else:
from StringIO import StringIO
f = StringIO(data)
encoded = base64.b64encode(f.read())
return "data:{};base64,{}".format(content_type, encoded)
url = "http://t0.tiles.virtualearth.net/tiles/a1210223003.jpeg?g=854&mkt=en-US"
w = wsinfo.Info(url)
img = html_image(w.content, w.content_type)
with open("out.html", "w") as html:
html.write('<img class="image1" data-description="The description" src="{}" />'.format(img))
代码同时运行Python 2和3,并生成一个名为out.html
的HTML文件,其中嵌入了图像。
答案 1 :(得分:0)
无需隐藏Bing地图密钥。任何人都可以根据免费使用条款创建并使用它。因此,他们没有动力窃取你的钥匙。在密钥似乎被盗的大多数情况下,根本原因是代码被移交,其中包含在论坛帖子中的代码示例中发布的密钥或密钥。密钥的用户通常不知道代码中的密钥。 Bing Maps团队能够跟踪这些情况并根据需要解决这些问题。这说很少发生。通常,当有人想要窃取Bing地图密钥时,他们只需使用Bing Maps网站上的密钥。