沈阳微信网站开发,丝绸之路网站建设策划书,番禺厂家关键词优化,公司变更通知上一篇博客#xff1a;Flask之手搓bootstrap翻页-CSDN博客 里#xff0c;对 OMDb API - The Open Movie Database 的搜索#xff0c;只能使用英文#xff0c;才能搜索出电影信息#xff0c;如果使用中文#xff0c;是搜索不到结果的。这里就需要使用翻译#xff0c;把中…上一篇博客Flask之手搓bootstrap翻页-CSDN博客 里对 OMDb API - The Open Movie Database 的搜索只能使用英文才能搜索出电影信息如果使用中文是搜索不到结果的。这里就需要使用翻译把中文电影名翻译成英文电影名。 
这里使用百度翻译百度翻译量少的话是免费的百度翻译开放平台而且有python的示例代码可以直接照抄。 
# -*- coding: utf-8 -*-# This code shows an example of text translation from English to Simplified-Chinese.
# This code runs on Python 2.7.x and Python 3.x.
# You may install requests to run this code: pip install requests
# Please refer to https://api.fanyi.baidu.com/doc/21 for complete api documentimport requests
import random
import json
from hashlib import md5# Set your own appid/appkey.
appid  INPUT_YOUR_APPID
appkey  INPUT_YOUR_APPKEY# For list of language codes, please refer to https://api.fanyi.baidu.com/doc/21
from_lang  en
to_lang   zhendpoint  http://api.fanyi.baidu.com
path  /api/trans/vip/translate
url  endpoint  pathquery  Hello World! This is 1st paragraph.\nThis is 2nd paragraph.# Generate salt and sign
def make_md5(s, encodingutf-8):return md5(s.encode(encoding)).hexdigest()salt  random.randint(32768, 65536)
sign  make_md5(appid  query  str(salt)  appkey)# Build request
headers  {Content-Type: application/x-www-form-urlencoded}
payload  {appid: appid, q: query, from: from_lang, to: to_lang, salt: salt, sign: sign}# Send request
r  requests.post(url, paramspayload, headersheaders)
result  r.json()# Show response
print(json.dumps(result, indent4, ensure_asciiFalse))只需要在搜索路由里将form表单传递过来的中文搜索词翻译成英文即可。如果是英文那就让它再翻译一遍一般是没有变化。 详细代码如下。 
app.py 
from flask import Flask, render_template, request
import requests
import math
import json
import random
from hashlib import md5app  Flask(__name__)app.route(/, methods[GET])
# app.route(/?sspagepage, methods[GET])
def main():s  request.args.get(s)page  request.args.get(page)if page is None:page  1else:page  int(request.args.get(page))if s is None:s  superman# Here is your key: 4ee0241e# OMDb API: http://www.omdbapi.com/?itt3896198apikey4ee0241e# rawData  requests.get(http://www.omdbapi.com/?apikey4ee0241esbatmanpage1)rawData  requests.get(fhttp://www.omdbapi.com/?apikey4ee0241es{s}page{page})movies  rawData.json()if movies[Response]  True:pages  math.ceil(int(movies[totalResults]) / 10)else:pages  0data  dict(moviesmovies,active1active,active2,pagespages,pagepage,ss,)return render_template(index.html, datadata)app.route(/, methods[POST])
def search():s  request.form[name]en_s  fanyi(s)page  1rawData  requests.get(fhttp://www.omdbapi.com/?apikey4ee0241es{en_s}page{page})movies  rawData.json()if movies[Response]  True:pages  math.ceil(int(movies[totalResults]) / 10)else:pages  0data  dict(moviesmovies,active1active,active2,pagespages,pagepage,ss,)return render_template(index.html, datadata)def fanyi(s):# Set your own appid/appkey.appid  INPUT_YOUR_APPIDappkey  INPUT_YOUR_APPKEY# For list of language codes, please refer to https://api.fanyi.baidu.com/doc/21from_lang  zhto_lang  enendpoint  http://api.fanyi.baidu.compath  /api/trans/vip/translateurl  endpoint  path# query  Hello World! This is 1st paragraph.\nThis is 2nd paragraph.query  s# Generate salt and signdef make_md5(sm, encodingutf-8):return md5(sm.encode(encoding)).hexdigest()salt  random.randint(32768, 65536)sign  make_md5(appid  query  str(salt)  appkey)# Build requestheaders  {Content-Type: application/x-www-form-urlencoded}payload  {appid: appid, q: query, from: from_lang, to: to_lang, salt: salt, sign: sign}# Send requestr  requests.post(url, paramspayload, headersheaders)result  r.json()# Show response# print(json.dumps(result[trans_result][0][dst], indent4, ensure_asciiFalse))# print(json.dumps(result, indent4, ensure_asciiFalse))  # superman# print(result[trans_result][0][dst])   # supermanreturn result[trans_result][0][dst]app.route(/imdbID)
def movie_by_title(imdbID):# rawData  requests.get(http://www.omdbapi.com/?apikey4ee0241ei{}.format(imdbID))rawData  requests.get(fhttp://www.omdbapi.com/?apikey4ee0241ei{imdbID})movie  rawData.json()data  dict(moviemovie,active1,active2active,)return render_template(movie.html, datadata)if __name__  __main__:app.run(debugTrue)footer.html 
div classmt-3script srchttps://cdn.jsdelivr.net/npm/bootstrap5.3.2/dist/js/bootstrap.bundle.min.jsintegritysha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfLcrossoriginanonymous/script
/div 
header.html 
meta charsetUTF-8
title母版/title
link hrefhttps://cdn.jsdelivr.net/npm/bootstrap5.3.2/dist/css/bootstrap.min.css relstylesheetintegritysha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN crossoriginanonymousnav.html 
div classcontain  bg-body-tertiarynav classnavbar navbar-expand-lg containerdiv classcontainer-fluida classnavbar-brand电影/abutton classnavbar-toggler typebutton data-bs-togglecollapsedata-bs-target#navbarSupportedContentaria-controlsnavbarSupportedContent aria-expandedfalse aria-labelToggle navigationspan classnavbar-toggler-icon/span/buttondiv classcollapse navbar-collapse idnavbarSupportedContentul classnavbar-nav me-auto mb-2 mb-lg-0li classnav-item {{ data[active1] }}a classnav-link aria-currentpage href/首页/a/lili classnav-item {{ data[active2] }}a classnav-link hrefjavascript:(0)详情/a/li/ulform classd-flex rolesearch methodpost action{{ url_for(search) }}input classform-control me-2 typesearch namename placeholder搜索影片 value{{ data.s }}aria-labelSearchbutton classbtn btn-outline-success typesubmitsearch/button/form/div/div/nav
/div 
home.html 
!DOCTYPE html
html langen
head{% block head %}{% include ./common/header.html %}{% endblock %}style.card:hover {box-shadow: 10px 5px 5px #ccc;}.active {background: rgb(208, 216, 222);}.navbar {--bs-navbar-padding-y: 0;}.nav-link {padding: 20px;}.row  * {padding-left: 0;}/style
/head
body
{% block nav %}{% include ./common/nav.html %}
{% endblock %}
div classcontainer mt-3div classrow{% block content %}{% endblock %}/div
/div
{% block footer %}{% include ./common/footer.html %}
{% endblock %}
/body
/html 
movie.html 
{% extends common/home.html %}{% block content %}div classd-flex align-items-center justify-content-centerdiv classcard mb-3 stylemax-width: 1080px;div classrowdiv classcol-md-4img src{{ data[movie].Poster }} classimg-fluid rounded-start alt.../divdiv classcol-md-8div classcard-bodyh5 classcard-title{{ data[movie].Title }}/h5p classcard-textYear:{{ data[movie].Year }}/pp classcard-textRuntime:{{ data[movie].Runtime }}/pp classcard-textActors:{{ data[movie].Actors }}/pp classcard-text{{ data[movie].Actors }}/pp classcard-text{{ data[movie].Year }}/pp classcard-textsmall classtext-body-secondary{{ data[movie].Plot }}/small/p/divdiv classd-flex align-items-center justify-content-centera href{{ url_for(main) }} classbtn btn-success返回/a/div/div/div/div/div
{% endblock %} index.html 
{% extends common/home.html %}{% block content %}{% for movie in data[movies].Search %}div classcol text-center mt-3div classcard styleheight: 510px;overflow: hidden;width: 240px;img src{{ movie.Poster }} height350 classcard-img-top alt...div classcard-bodyh5 classcard-title styleheight: 48px;{{ movie.Title[:35] }}/h5p classcard-text{{ movie.Year }}/pa href/{{ movie.imdbID }} classbtn btn-primary详情/a/div/div/div{% endfor %}{#    翻页    #}div classd-flex align-items-center justify-content-centerdiv classmt-3 mb-5nav aria-labelPage navigation example{% if data.pages0 %}ul classpagination pagination-lg justify-content-centerli classpage-item {{ disabled if data.page1 else  }}a classpage-link href/?s{{ data.s }}page{{ data.page -  1 }}aria-labelPreviousspan aria-hiddentruelaquo;/span/a/li{% if data.pages8 %}{% for i in range(data.pages) %}li classpage-itemaclasspage-link {{ disabled if data.page  i  1 else  }}href/?s{{ data.s }}page{{ i  1 }}{{ i  1 }}/a/li{% endfor %}{% elif data.pages8 %}{% for i in range(3) %}{% if data.pages - 5  data.page %}li classpage-itemaclasspage-link {{ disabled if data.page  i  data.page else  }}href/?s{{ data.s }}page{{ i  data.page }}{{ i  data.page }}/a/li{% else %}li classpage-itemaclasspage-link {{ disabled if data.page  i  data.pages - 5 else  }}href/?s{{ data.s }}page{{ data.pages - 5  i }}{{ i  data.pages - 5 }}/a/li{% endif %}{% endfor %}li classpage-item}a classpage-link hrefjavascript:(0)span aria-hiddentrue.../span/a/li{% for i in range(3)[::-1] %}li classpage-itemaclasspage-link {{ disabled if data.page  data.pages - i else  }}href/?s{{ data.s }}page{{ data.pages - i }}{{ data.pages - i }}/a/li{% endfor %}{% endif %}li classpage-item {{ disabled if data.pagedata.pages else  }}a classpage-link href# aria-labelNextspan aria-hiddentrueraquo;/span/a/li/ul{% else %}搜索: span classtext-warning{{ data.s }}/span 的结果为空{% endif %}/nav/div/div{% endblock %} 
index.html模板里加上了没有结果时的代码 
{% else %}搜索: span classtext-warning{{ data.s }}/span 的结果为空
{% endif %} 把数字放前面反而可以搜到不知道翻译是咋翻译的。