Flask 解决跨域问题

使用步骤

引入库

pip install flask-cors

配置

flask-cors 有两种用法,一种为全局使用,一种对指定的路由使用

1.使用 CORS函数 配置全局路由

from flask import Flask, request
from flask_cors import CORS

app = Flask(__name__)
CORS(app, supports_credentials=True)

其中 CORS 提供了一些参数帮助我们定制一下操作。

Flask 框架介绍

Flask是Python中一个轻量级web框架,路由机制简单便捷,上手很快,生产环境需要搭配 uwsgi 进行使用。 python 中主要引入:

from flask import Flask, request, Response, jsonify

app = Flask(__name__)

以上是Flask初始化,那么接下来最主要的是如何配置路由?

Python 时间处理

简介

时间的处理是各大语言都需要处理的问题,主要在于字符串和时间对象之间的互相转换,用于满足不同场景的需求,那么下面我们就来介绍下在 python 中如何进行转换。

GMS TV端调研

参考网站

https://42matters.com/google-tv-app-store-statistics-and-trends

Google Play TV 应用

https://play.google.com/store/apps?device=tv&gl=jp
https://play.google.com/store/games?gl=jp

GMS TV 端库说明

# 依赖Google Play Service 的API列表
https://developers.google.com/android/guides/setup?device=android-tv#dependencies
https://developers.google.com/android/reference/packages

脚本

import os
import shutil

gms_map = {}

def parseApk(path, pkg):
	unzip_path = path + "/" + pkg
	apk_path = unzip_path + ".apk"
	print("parse apk:" + pkg, apk_path)
	if os.path.exists(unzip_path) is False:
		cmd = '/Users/dongdong.lei/bin/apktool d ' + '"' + apk_path + '"'
		print("cmd:" + cmd)
		os.system(cmd)
	if os.path.exists(unzip_path):
		file_list = os.listdir(unzip_path)
		for file_path in file_list:
			gms_path = unzip_path + "/" + file_path + "/com/google/android/gms"
			if os.path.exists(gms_path):
				gms_list = os.listdir(gms_path)
				for gms_file in gms_list:
					gms_module = "com.google.android.gms." + gms_file
					gms_pkgs = []
					if gms_module in gms_map:
						gms_pkgs = gms_map[gms_module]
					gms_pkgs.append(pkg)
					gms_map[gms_module] = list(set(gms_pkgs))
		# 删除反编译包
		shutil.rmtree(unzip_path)


pkgs = [
"com.disney.disneyplus",
"com.netflix.ninja",
"com.facebook.katana",
"tv.twitch.android.app",
"com.google.android.youtube.tvkids",
"com.amazon.amazonvideo.livingroom",
"com.yodo1.crossyroad",
"fm.awa.liverpool",
"com.viki.android",
"com.bamnetworks.mobile.android.gameday.atbat",
"com.nousguide.android.rbtv",
"com.dazn",
"com.vimeo.android.videoapp",
"com.nttdocomo.android.danimestb",
"com.vidio.android.tv",
"com.apple.atve.androidtv.appletv",
"com.apple.atve.sony.appletv",
"com.espn.score_center",
"com.spb.tv.am",
"com.flipps.fitetv",
"com.amazon.music.tv",
"jp.co.nttdocomo.dtv.androidtv",
"com.degoo.android",
"com.famousbluemedia.yokee",
"brownmonster.app.game.rushrally3",
"com.loupeart.loupe",
"com.google.android.youtube.tv",
"tv.abema",
"jp.unext.tv.player",
"com.viki.android",
"jp.co.yahoo.gyao.android.app",
"jp.co.tver.tvapp",
"jp.co.nttdocomo.dtv.androidtv",
"jp.paravi.androidtv",
"com.kddi.android.stb4kvideopass",
"air.jp.co.fujitv.fodviewer.tv",
"jp.co.rakuten.nba.tv.android",
"jp.videomarket.android.cc",
"com.bch.sp.bchmembershipapp",
"jp.co.rakuten.video.rakutentvapp",
"jp.tmediahd.android.tsutaya_tv_atv",
"com.spotify.tv.android",
"tunein.player",
"com.appgeneration.itunerfree",
"deezer.android.tv",
"com.famousbluemedia.yokee",
"com.djit.equalizerplusforandroidfree",
"com.netflix.ninja",
"com.facebook.katana",
"org.videolan.vlc",
"tv.twitch.android.app",
"com.plexapp.android",
"com.nousguide.android.rbtv",
"com.gotv.nflgamecenter.us.lite",
"com.ajnsnewmedia.kitchenstories",
"com.dailymotion.dailymotion",
"com.spb.tv.am",
"com.mubi",
"com.riatech.cookbook",
"jp.videomarket.android.cc",
"com.archos.mediacenter.videofree",
"com.peirr.workout.play",
"com.haystack.android",
"com.usatoday.android.news",
"com.foxnews.android",
"com.ted.android.tv",
"com.wapo.posttv",
"com.pelmorex.WeatherEyeAndroid.tv",
"com.bloomberg.btva",
"com.vectorunit.purple.googleplay",
"com.gameloft.android.ANMP.GloftA8HM",
"com.fgol.HungrySharkEvolution",
"com.zeptolab.thieves.google",
"com.rawfury.longhathouse.Dandara",
"com.ubisoft.redlynx.trialsfrontier.ggp",
"com.madfingergames.deadtrigger2",
"com.FDGEntertainment.redball4.gp",
"com.doodle.turboracing3d",
"com.hyperkani.bomberfriends",
"com.secretexit.turbodismount",
"com.giantssoftware.fs14",
"com.frogmind.badland"
]

for pkg in pkgs:
	parseApk("/Users/dongdong.lei/Downloads/gp_apps", pkg)

print(gms_map)


download

未整理

今天在安装 APP 进行调试的时候,发现一直安装不上,显示: Too many active sessions for UID xxx,一开始还以为是调试的 APP 的问题,但是试了其他 APP 也不行。

从往上搜索了很多的方法都不行,估计都是复制粘贴的答案,不得已只能自己去源码中寻找答案。

日志统计方法

统计在某个时段API的请求量

示例:统计 2022/08/12 日凌晨3点的API量并根据请求量进行排序

grep "12/Aug/2022:03" access.log | awk '{print $7}' | awk -F\? '{print $1}' | sort | uniq -c | sort -nr

示例:统计 2022/08/12 日凌晨3点的接口 status 中根据 m 值参数去重统计

Mysql 慢查询

什么是慢查询

顾名思义,执行很慢的查询,那很慢的标准是什么?

我们可以通过查询 long_query_time 变量查看当前数据库慢查询的阀值是多少;

show variables like 'long_query_time';

mysql_long_query_time

但是数据库默认是把慢查询日志给关闭的,那怎么知道现在数据库慢查询是开还是关呢?