AsinSeedApi

不写注释的程序员-加密

将JAVA API接口 改写成 Python

JAVA

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils; import java.io.IOException;
import java.security.MessageDigest; public class AsinSeedApiTest {
private static final char[] HEX_CHAR = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
private static final String PARTNER_CODE = "xxx";
private static final String PARTNER_SECRET_KEY = "xxx-xxx-xxx-xxx"; private static String byteArrayToHexString(byte[] byteArray) {
StringBuffer resultSb = new StringBuffer();
for (int i = 0; i < byteArray.length; i++) {
int n = byteArray[i];
n = n < 0 ? n + 256 : n;
resultSb.append(HEX_CHAR[n / 16]).append(HEX_CHAR[n % 16]);
}
return resultSb.toString();
} private static String encode(String origin) {
String output = null;
try {
MessageDigest md = MessageDigest.getInstance("MD5");
output = byteArrayToHexString(md.digest(origin.getBytes("UTF-8")));
} catch (Throwable e) {
e.printStackTrace();
}
return null != output ? output.substring(0, 12) : "";
} public static void main(String[] args) {
String marketplace = "US";
String asin = "B017H39S5U";
String partner = PARTNER_CODE;
String qid = marketplace + "_" + asin + "_" + PARTNER_SECRET_KEY;
qid = encode(qid);
String urlStr = "https://www.asinseed.com/api/" + marketplace + "/" + asin + "/" + partner + "/" + qid;
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(urlStr);
try {
HttpResponse response = httpClient.execute(httpGet);
HttpEntity responseEntity = response.getEntity();
if (null != responseEntity) {
String responseJsonStr = EntityUtils.toString(responseEntity, "UTF-8");
JSONObject result = JSON.parseObject(responseJsonStr);
String code = result.getString("code");
if ("ok".equalsIgnoreCase(code)) {
JSONObject data = result.getJSONObject("data");
JSONArray keywords = data.getJSONArray("keywords");
//TODO your custom business logic
System.out.println(keywords.toJSONString());
} else {
String errMsg = result.get("message").toString();
//TODO handle the error msg from api
System.out.println("errorMs=>" + errMsg);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

Python

class AsinSeedApiTest:
HEX_CHAR = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f']
PARTNER_CODE = PARTNER_CODE
PARTNER_SECRET_KEY = PARTNER_SECRET_KEY @classmethod
def byteArrayToHexString(cls, byteArray):
resultSb = ''
for n in byteArray:
n = n + 256 if n < 0 else n
resultSb += (cls.HEX_CHAR[n // 16])
resultSb += (cls.HEX_CHAR[n % 16])
return resultSb @classmethod
def encode(cls, origin):
m = hashlib.md5()
m.update(origin.encode('utf-8'))
output = m.hexdigest()
return output[0:12] if output else "" @classmethod
def main(cls, marketplace, asin):
marketplace = marketplace
asin = asin
partner = cls.PARTNER_CODE
qid = marketplace + "_" + asin.upper() + "_" + cls.PARTNER_SECRET_KEY # ASIN
qid = cls.encode(qid)
urlStr = "https://www.asinseed.com/api/" + marketplace + "/" + asin + "/" + partner + "/" + qid # ASIN url
keyWord_urlStr = "https://www.asinseed.com/api/" + marketplace + "/" + partner + "/" + qid + '?keyword=' + asin # 关键词 url return urlStr, keyWord_urlStr

将JAVA API接口 改写成 Python的更多相关文章

  1. 熟练掌握HDFS的Java API接口访问

    HDFS设计的主要目的是对海量数据进行存储,也就是说在其上能够存储很大量文件(可以存储TB级的文件).HDFS将这些文件分割之后,存储在不同的DataNode上, HDFS 提供了两种访问接口:She ...

  2. 掌握HDFS的Java API接口访问

    HDFS设计的主要目的是对海量数据进行存储,也就是说在其上能够存储很大量文件(可以存储TB级的文件).HDFS将这些文件分割之后,存储在不同的DataNode上, HDFS 提供了两种访问接口:She ...

  3. android框架Java API接口总注释/**@hide*/和internal API

    Android有两种类型的API是不能经由SDK访问的 l 第一种是位于com.android.internal包中的API我,位于frameworks/base/core/java/com/andr ...

  4. python使用zabbix的API接口

    一.实验环境 python3.6.6 zabbix 3.0.9 二.实验目的 了解Zabbix的API接口格式 通过python实现登陆zabbix服务,获得登陆token 通过python检索zab ...

  5. 利用Java API通过路径过滤上传多文件至HDFS

    在本地文件上传至HDFS过程中,很多情况下一个目录包含很多个文件,而我们需要对这些文件进行筛选,选出符合我们要求的文件,上传至HDFS.这时就需要我们用到文件模式. 在项目开始前,我们先掌握文件模式 ...

  6. SIP:用Riverbank的SIP创建C++库的Python模块(把自己的C++库包装成Python模块)

    我们发现PyQt做的Python版的PyQt是如此好用,如果想把自己的C++库包装成Python模块该如何实现呢? 这里介绍下用SIP包装C++库时值得参考的功能实现: 需要Python模块中实现C+ ...

  7. 没想到吧,Java开发 API接口可以不用写 Controller了

    本文案例收录在 https://github.com/chengxy-nds/Springboot-Notebook 大家好,我是小富~ 今天介绍我正在用的一款高效敏捷开发工具magic-api,顺便 ...

  8. Java 调用Restful API接口的几种方式--HTTPS

    摘要:最近有一个需求,为客户提供一些Restful API 接口,QA使用postman进行测试,但是postman的测试接口与java调用的相似但并不相同,于是想自己写一个程序去测试Restful ...

  9. 在Java API设计中,面向接口编程的思想,以及接口和工厂的关系

    现在的java API的设计中,提倡面向接口的编程,即在API的设计中,参数的传递和返回建议使用接口,而不是具体的实现类,如一个方法的输入参数类型应该使用Map接口,而不是HashMap或Hashta ...

随机推荐

  1. 巧用map解决nginx的Location里if失效问题

    需求: Nginx根据参数来输出不同的header 我们想用Nginx来判断一些通用的参数, 根据参数情况在输出中不同的header, 或者cookie, 那么根据正常思路, 有如下配置: locat ...

  2. 为ScrollView增加圆角的三种方式,及自定义属性【在Linearlayout中新增ScrollView支持滚动 后续】

    获取圆角的几种方案如下:方案一:通过shape来实现,给scrollView增加背景来实现方案二:通过自定义ScrollView,还要自定义属性,在dispatchDraw中不停的裁剪方案三:用And ...

  3. 靶机DC-2 rbash绕过+git提权

    这个靶机和DC-1一样,一共5个flag.全部拿到通关. root@kali:/home/kali# nmap -sP 192.168.1.* 先扫一下靶机的IP地址,拿到靶机的地址为192.168. ...

  4. 深入了解jvm-2Edition-虚拟机字节码执行引擎

    1.概述 Java虚拟机规范制定了虚拟机字节码执行引擎的概念模型,本章主要从概念模型层次来探究虚拟机的方法调用和字节码执行. 方法调用中,最核心的,是如何确定调用的方法,也就是方法的分派. 字节码执行 ...

  5. Create Virtual Network with VirtualBox on Mint 14

    VirtualBox version: VirtualBox-4.2.18-88780-Linux_x86.run Host OS: Linux Mint 14 Xfce Setup Network ...

  6. Longhorn 云原生分布式块存储解决方案设计架构和概念

    内容来源于官方 Longhorn 1.1.2 英文技术手册. 系列 Longhorn 是什么? 目录 1. 设计 1.1. Longhorn Manager 和 Longhorn Engine 1.2 ...

  7. springboot打包问题

    pom.xml <build> <plugins> <plugin> <groupId>org.springframework.boot</gro ...

  8. SpringBoot 整合缓存Cacheable实战详细使用

    前言 我知道在接口api项目中,频繁的调用接口获取数据,查询数据库是非常耗费资源的,于是就有了缓存技术,可以把一些不常更新,或者经常使用的数据,缓存起来,然后下次再请求时候,就直接从缓存中获取,不需要 ...

  9. Java 多线程与并发【知识点笔记】

    Java 多线程与并发[知识点笔记] Java多线程与并发 先说一下线程与进程的由来: 在初期的计算机,计算机只能串行执行任务,并且需要长时间的等待用户的输入才行 到了后来,出现了批处理,可以预先将用 ...

  10. 新版数据库分页方法(Sql server2012)

    1. ROW_NUMBER() 的分页方法 dbcc freeproccache dbcc dropcleanbuffers set statistics time on set statistics ...