1688以图搜图API接口|c#爬虫-1688官网自动以图搜图

1688item_search_img 拍立淘

背景

在1688有个功能,就是上传图片,就可以找到类似的商品。如下

图片

网址 :https://www.1688.com/

这时候,我们可以使用程序来代替,大批量的完成图片上传功能。

实现思路

1、找到图片上传接口

1688.item_search_img

公共参数

名称类型必须描述
keyString调用key(必须以GET方式拼接在URL中)
secretString调用密钥
api_nameStringAPI接口名称(包括在请求地址中)[item_search,item_get,item_search_shop等]
cacheString[yes,no]默认yes,将调用缓存的数据,速度比较快
result_typeString[json,jsonu,xml,serialize,var_export]返回数据格式,默认为json,jsonu输出的内容中文可以直接阅读
langString[cn,en,ru]翻译语言,默认cn简体中文
versionStringAPI版本

请求参数

请求参数:imgid=http://g-search3.alicdn.com/img/bao/uploaded/i4/O1CN01IDpcD81zHbpHs1YgT_!!2200811456689.jpg

参数说明:imgid:图片地址(使用淘宝upload_img接口上传图片,返回图片地址)
如:https://img.alicdn.com/imgextra/i3/15353738/TB2HDHAqN9YBuNjy0FfXXXIsVXa_!!15353738-0-beehive-scenes.jpg


post请求,form表单中有signature签名

图片

2、再找sign生成接口,全局搜素找一下signature,发现了一个返回signature的接口。

图片


接口链接:https://open-s.1688.com/openservice/ossDataService
 

图片


这个接口也有一个变动的参数 appKey
 

图片


全局搜索后在js文件中查看一下
 

图片


往下找就可以发现appkey的生成了。
 

图片


通过debug来查看生成规则。
 

图片


获取加密时间的接口:https://open-s.1688.com/openservice/.htm?
参数:outfmt =json&serviceIds=cbu.searchweb.config.system.currenttime

需要先请求这个接口,获取加密时间。

   private void go(string parhfile)        {            var response = HttpHelper.CreateGetHttpResponse("https://open-s.1688.com/openservice/.htm?serviceIds=cbu.searchweb.config.system.currenttime&outfmt=json", 5000, null, null);            Stream myResponseStream = response.GetResponseStream();            StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));            string retString = myStreamReader.ReadToEnd();            myStreamReader.Close();            myResponseStream.Close();            if (response.StatusCode == HttpStatusCode.OK)            {                var ss = JsonConvert.DeserializeObject<Currenttimemodel>(retString.Replace("cbu.searchweb.config.system.currenttime", "currenttime"));                //  SetText("加密时间:" + ss.currenttime.dataSet.ToString());                getsin(ss.currenttime.dataSet.ToString(), parhfile);            }            else            {                SetText("错误代码:" + response.StatusCode.ToString());            }        }

再把时间和appName 传入 getAppKey。
 

图片


然后e= “appname ; t” ,appName的base64编码之后的结果是 “cGNfdHVzb3U=”

图片

经过encode64返回 i ( appkey)

图片

然后通过上面生成sign的接口:https://open-s.1688.com/openservice/ossDataService

传入参数就行请求,就可以返回signature,policy,accessid。

params = {
     "appName": key,
     "appKey": base64.b64encode(appkey.encode("utf-8")),
         }
  • 1

  • 2

  • 3

  • 4

  /// <summary>        /// sign生成接口        /// </summary>        /// <param name="dataSet"></param>        private void getsin(string dataSet, string parhfile)        {            string appName = "pc_tusou";            //getAppKey            string appKey = Base64.EncodeBase64("utf-8", appName + ";" + dataSet.ToString());            var response = HttpHelper.CreateGetHttpResponse("https://open-s.1688.com/openservice/ossDataService?appName=" + appName + "&appKey=" + appKey, 5000, null, null);            Stream myResponseStream = response.GetResponseStream();            StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));            string retString = myStreamReader.ReadToEnd();            myStreamReader.Close();            myResponseStream.Close();            if (response.StatusCode == HttpStatusCode.OK)            {                var ss = JsonConvert.DeserializeObject<Rootsin>(retString);                //  SetText("sign:" + ss.data.signature);                string key = "cbuimgsearch/" + Base64.Getimgname() + Base64.GetTimeStamp() + ".jepg";                var client = new RestClient("https://cbusearch.oss-cn-shanghai.aliyuncs.com/");                client.Timeout = -1;                var request = new RestRequest(Method.POST);                request.AddHeader("Origin", "https://www.1688.com");                client.UserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36";                request.AddHeader("Accept", "*/*");                request.AddHeader("Cache-Control", "no-cache");                request.AddHeader("cookie", "_samesite_flag_=true; _tb_token_=ee5138b911917; cookie2=163f6e3722351213514df4c9ab9116f6; t=96e8d0ab6d636f19306c429b276db552; __cn_logon__=false; ali_ab=120.253.224.246.1587973275662.6; l=caJGIJNTkgnFkWiGkSYyeKDwPQuOAiFJdcPgDahIhDlFGpKMvULclIQGPBDmDhmDdCsLYIU; na=ijBRbdRXZeKwRcTHilfNHSt+; ");                request.AddHeader("refer", "https://www.1688.com/");                request.AddParameter("name", Base64.Getname() + ".jpeg");                request.AddParameter("key", key);                request.AddParameter("OSSAccessKeyId", ss.data.accessid);                request.AddParameter("callback", "");                request.AddParameter("policy", ss.data.policy);                request.AddParameter("signature", ss.data.signature);                request.AddParameter("success_action_status", "200");                request.AddFile("file", parhfile);                IRestResponse response2 = client.Execute(request);                Console.WriteLine(response2.Content);                if (response2.StatusCode == HttpStatusCode.OK)                {                    string picurl = "https://s.1688.com/youyuan/index.htm?tab=imageSearch&imageType=oss&imageAddress=" + key + "&spm=";                    SetText3("\r\n" + picurl);                    Write(picurl);                }                else                {                    SetText("错误代码:" + response2.StatusCode.ToString());                }            }            else            {                SetText("错误代码:" + response.StatusCode.ToString());            }        }

3、数据详情接口

图片上传之后,返回的数据接口:
https://search.1688.com/service/imageSearchOfferResultViewService?

图片


参数:
 

图片


imageAddress是在上传图片之后返回的值
requestId 初始化参数,可以为空。
整个流程就是这样了,接着构造请求就可以获取数据了。

图片

完整代码

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.IO;using System.Linq;using System.Net;using System.Net.Http;using System.Net.Http.Headers;using System.Net.Security;using System.Security.Cryptography.X509Certificates;using System.Text;using System.Threading;using System.Threading.Tasks;using System.Windows.Forms;using Newtonsoft.Json;using Reptiles1688;using RestSharp;
namespace WindowsFormsApp1{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }
        private void button1_Click(object sender, EventArgs e)        {            ThreadPool.QueueUserWorkItem(new WaitCallback(crawlingWeb), "test");        }
        public void Write(string s)        {            string path = System.Environment.CurrentDirectory + "\\图片url\\" + Guid.NewGuid().ToString();            if (!Directory.Exists(path))                Directory.CreateDirectory(path);            FileStream fs = new FileStream(path + "\\data.txt", FileMode.Create);            //获得字节数组            byte[] data = System.Text.Encoding.Default.GetBytes(s);            //开始写入            fs.Write(data, 0, data.Length);            //清空缓冲区、关闭流            fs.Flush();            fs.Close();        }
        private delegate void SetLabelDelegate(string value);
        private void SetText(string value)        {            if (this.InvokeRequired)            {                SetLabelDelegate d = new SetLabelDelegate(SetText);                this.Invoke(d, new object[] { value });            }            else            {                textBox1.Text = value.ToString() + textBox1.Text;            }        }
        private delegate void SetLabelDelegate3(string value);
        private void SetText3(string value)        {            if (this.InvokeRequired)            {                SetLabelDelegate3 d = new SetLabelDelegate3(SetText3);                this.Invoke(d, new object[] { value });            }            else            {                textBox3.Text = value.ToString() + textBox3.Text;            }        }
        private void crawlingWeb(object data)        {            for (int aa = 1; aa < 50; aa++)            {                //  SetText3(aa.ToString());                for (int a = 1; a < 4; a++)                {                    string ss = "D:\\pppppppppppppp\\" + a + ".jpg";                    //  SetText3(aa.ToString() + "-" + a);
                    go(ss);                    Thread.Sleep(500);                }            }
            SetText3("\r\n ok");        }
        private void go(string parhfile)        {            var response = HttpHelper.CreateGetHttpResponse("https://open-s.1688.com/openservice/.htm?serviceIds=cbu.searchweb.config.system.currenttime&outfmt=json", 5000, null, null);            Stream myResponseStream = response.GetResponseStream();            StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));            string retString = myStreamReader.ReadToEnd();            myStreamReader.Close();            myResponseStream.Close();            if (response.StatusCode == HttpStatusCode.OK)            {                var ss = JsonConvert.DeserializeObject<Currenttimemodel>(retString.Replace("cbu.searchweb.config.system.currenttime", "currenttime"));                //  SetText("加密时间:" + ss.currenttime.dataSet.ToString());                getsin(ss.currenttime.dataSet.ToString(), parhfile);            }            else            {                SetText("错误代码:" + response.StatusCode.ToString());            }        }
        /// <summary>        /// sign生成接口        /// </summary>        /// <param name="dataSet"></param>        private void getsin(string dataSet, string parhfile)        {            string appName = "pc_tusou";            //getAppKey            string appKey = Base64.EncodeBase64("utf-8", appName + ";" + dataSet.ToString());            var response = HttpHelper.CreateGetHttpResponse("https://open-s.1688.com/openservice/ossDataService?appName=" + appName + "&appKey=" + appKey, 5000, null, null);            Stream myResponseStream = response.GetResponseStream();            StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));            string retString = myStreamReader.ReadToEnd();            myStreamReader.Close();            myResponseStream.Close();            if (response.StatusCode == HttpStatusCode.OK)            {                var ss = JsonConvert.DeserializeObject<Rootsin>(retString);                //  SetText("sign:" + ss.data.signature);                string key = "cbuimgsearch/" + Base64.Getimgname() + Base64.GetTimeStamp() + ".jepg";                var client = new RestClient("https://cbusearch.oss-cn-shanghai.aliyuncs.com/");                client.Timeout = -1;                var request = new RestRequest(Method.POST);                request.AddHeader("Origin", "https://www.1688.com");                client.UserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36";                request.AddHeader("Accept", "*/*");                request.AddHeader("Cache-Control", "no-cache");                request.AddHeader("cookie", "_samesite_flag_=true; _tb_token_=ee5138b911917; cookie2=163f6e3722351213514df4c9ab9116f6; t=96e8d0ab6d636f19306c429b276db552; __cn_logon__=false; ali_ab=120.253.224.246.1587973275662.6; l=caJGIJNTkgnFkWiGkSYyeKDwPQuOAiFJdcPgDahIhDlFGpKMvULclIQGPBDmDhmDdCsLYIU; na=ijBRbdRXZeKwRcTHilfNHSt+; ");                request.AddHeader("refer", "https://www.1688.com/");                request.AddParameter("name", Base64.Getname() + ".jpeg");                request.AddParameter("key", key);                request.AddParameter("OSSAccessKeyId", ss.data.accessid);                request.AddParameter("callback", "");                request.AddParameter("policy", ss.data.policy);                request.AddParameter("signature", ss.data.signature);                request.AddParameter("success_action_status", "200");                request.AddFile("file", parhfile);                IRestResponse response2 = client.Execute(request);                Console.WriteLine(response2.Content);                if (response2.StatusCode == HttpStatusCode.OK)                {                    string picurl = "https://s.1688.com/youyuan/index.htm?tab=imageSearch&imageType=oss&imageAddress=" + key + "&spm=";                    SetText3("\r\n" + picurl);                    Write(picurl);                }                else                {                    SetText("错误代码:" + response2.StatusCode.ToString());                }            }            else            {                SetText("错误代码:" + response.StatusCode.ToString());            }        }    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/419032.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VR虚拟现实技术应用到猪抗原体检测的好处

利用VR虚拟仿真技术开展猪瘟检测实验教学确保生猪产业健康发展 为了有效提高猪场猪瘟防控意识和检测技术&#xff0c;避免生猪养殖业遭受猪瘟危害&#xff0c;基于VR虚拟仿真技术开展猪瘟检测实验教学数据能大大推动基层畜牧养殖业持续稳步发展保驾护航。 一、提高实验效率 VR虚…

Git安装的一些步骤解说(小白好奇心严重版本)

Use bundled OpenSSH 安装 Git 时&#xff0c;您面临的选择是使用 Git 自带的 SSH 客户端&#xff08;bundled OpenSSH&#xff09;还是使用系统上已安装的外部 SSH 客户端&#xff08;external OpenSSH&#xff09;。以下是两个选项的一些考虑因素&#xff1a; 使用 Git 自带的…

回溯是怎么回事(算法村第十八关青铜挑战)

组合 77. 组合 - 力扣&#xff08;LeetCode&#xff09; 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;n 4, k 2 输出&#xff1a; [[2,4],[3,4],[2,3],[1,2],[1,3],…

ssm274办公自动化管理系统

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一 、设计说明 1.1课题背…

IDEA开发环境的安装与编写第一个程序

1.下载 IDEA&#xff08;全称IntelliJ IDEA&#xff09;是用于Java程序开发的集成环境&#xff08;也可用于其他语言&#xff09;&#xff0c;它在业界被公认是最好的Java开发工具之一&#xff0c;尤其在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、CVS整合、代…

回溯 Leetcode 332 重新安排行程

重新安排行程 Leetcode 332 学习记录自代码随想录 给你一份航线列表 tickets &#xff0c;其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票都属于一个从 JFK&#xff08;肯尼迪国际机场&#xff09;出发的先生&a…

算力简单介绍

"算力"这个词在不同的领域有不同的含义。下面是几个常见的解释&#xff1a; 在计算机科学中&#xff0c; "算力"通常指的是计算机系统或设备的处理能力。这包括 CPU、GPU、TPU 等处理器的性能。算力可以用来衡量一个设备能够在一定时间内完成的计算任务数量…

内网搭建mysql8.0并搭建主从复制详细教程!!!

一、安装mysql 1.1 mysql下载链接&#xff1a; https://downloads.mysql.com/archives/community/ 1.2 解压包并创建相应的数据目录 tar -xvf mysql-8.2.0-linux-glibc2.28-x86_64.tar.xz -C /usr/local cd /usr/local/ mv mysql-8.2.0-linux-glibc2.28-x86_64/ mysql mkdir…

Pytorch 复习总结 4

Pytorch 复习总结&#xff0c;仅供笔者使用&#xff0c;参考教材&#xff1a; 《动手学深度学习》Stanford University: Practical Machine Learning 本文主要内容为&#xff1a;Pytorch 深度学习计算。 本文先介绍了深度学习中自定义层和块的方法&#xff0c;然后介绍了一些…

CBAM注意力机制详解(附pytorch复现)

简介 论文原址&#xff1a;1807.06521.pdf (arxiv.org) CBAM&#xff08;Convolutional Block Attention Module&#xff09;是一种卷积神经网络模块&#xff0c;旨在通过引入注意力机制来提升网络的表示能力。CBAM包含两个顺序子模块&#xff1a;通道注意力模块和空间注意力…

Android的硬件接口HAL

我一直觉得&#xff0c;现代计算机不是一门科学&#xff0c;起码快算不上一门理科科学。上上下下全是人造&#xff0c;左左右右全是生意&#xff0c;用管理学&#xff0c;经济学去学计算机&#xff0c;也许更看得懂很多问题。HAL就是一个典型例子。 传统Linux绕开了微软的霸权…

C# WPF编程-创建项目

1.创建新项目 选择“WPF应用程序”》“下一步” 设置项目 设置项目名称&#xff0c;保存位置等参数>下一步 3.选择框架 4.项目创建成功 5.运行项目

libvirt命名空间xmlns:qemu的使用

示例xml <domain type{domain_type} xmlns:qemuhttp://libvirt.org/schemas/domain/qemu/1.0><qemu:commandline><qemu:commandline><qemu:arg value-newarg/><qemu:env nameQEMU_ENV valueVAL/></qemu:commandline></domain>"…

分布式任务调度:XXL-Job入门介绍实战

1. 引言 随着互联网业务的不断扩展和复杂化&#xff0c;分布式任务调度成为了构建大规模系统的重要组成部分。XXL-Job作为一款开源的分布式任务调度平台&#xff0c;提供了完整的任务调度和管理功能&#xff0c;被广泛应用于各种场景。本文将介绍如何入门使用XXL-Job&#xff…

【InternLM 实战营笔记】浦语大模型趣味 Demo

大模型及 InternLM 模型简介 1.1 什么是大模型&#xff1f; 大模型通常指的是机器学习或人工智能领域中参数数量巨大、拥有庞大计算能力和参数规模的模型。这些模型利用大量数据进行训练&#xff0c;并且拥有数十亿甚至数千亿个参数。大模型的出现和发展得益于增长的数据量、…

开学季立式学习灯如何选择?六个挑选大路灯窍门让你不掉坑!

很多用户在选择大路灯时&#xff0c;总是优先考虑所谓的大品牌&#xff0c;但这其实是一个很大的误区。要知道&#xff0c;很多知名品牌的基础品质是还行&#xff0c;但是在专业技术地研发和优化上却鲜有成就&#xff0c;根本无法对光线显色度、稳定性等百余项参数进行实测&…

【leetcode】链表的中间节点

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家刷题&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 点击查看题目 思路: slow和fast都初始化为head&#xff0c;之后slow每走1步&#xff0c;fast走2步…

爬虫到底违法吗?你离违法还有多远?

最近&#xff0c;国家依法查处了部分编写爬虫程序&#xff0c;盗取其他公司数据的不良企业。一时间风声鹤唳&#xff0c;关于爬虫程序是否违法的讨论遍布程序员圈子。那么到底编写爬虫程序是否违法呢&#xff1f; 其爬虫下载数据&#xff0c;一般而言都不违法&#xff0c;因为…

华为---RSTP(四)---RSTP的保护功能简介和示例配置

目录 1. 技术背景 2. RSTP的保护功能 3. BPDU保护机制原理和配置命令 3.1 BPDU保护机制原理 3.2 BPDU保护机制配置命令 3.3 BPDU保护机制配置步骤 4. 根保护机制原理和配置命令 4.1 根保护机制原理 4.2 根保护机制配置命令 4.3 根保护机制配置步骤 5. 环路保护机…