最新版:1688商品采集软件 v1.52官方版
优采云 发布时间: 2022-11-18 18:52最新版:1688商品采集软件 v1.52官方版
1688商品采集软件是一款可以批量采集1688(阿里巴巴)商品信息的软件。它是由旧商店软件开发的。功能强大,操作简单,支持两种采集模式,页面设置采集和按关键词批量采集,采集信息包括产品ID ,产品名称,产品网址,产品价格,产品图片,月销售额,月销售额,退货率,商品描述,回复,发货,旺旺,公司名称,业务类型等字段,支持Win7及以上版本(32位或 64 位可用),如果需要,请下载!
软件功能
支持两种 采集 模式:
1. 页面设置 采集。
在WEB页面设置一个采集关键词,精细设置采集条件(如样式、颜色、尺寸等)。此细化 采集 适用于复杂条件。
2. 按关键词批量采集。
通过导入一批关键词,直接按关键词采集。采集的信息包括商品ID、商品标题、商品网址、商品价格、商品图、月销量、月销量、退货率、描述、回复、发货、旺旺、公司名称、业务类型、等字段,导出为文本表格(excel),可用于产品市场分析、同行销售业绩评估、企业信息采集等。每个产品关键词最多支持100页,每页60个产品, 以及大约 6000 条产品信息。支持详细的搜索参数设置,支持多个产品关键词顺序采集,不同的关键词每行一个Enter keys,支持字段排序(点击标题栏)然后导出保存。
软件特色
1. 只需鼠标点击,无需编写任何采集规则,
2、实时采集,非历史数据,用户本地最新的采集当前数据。
3、操作简单易用,傻瓜式操作,两步到位(导入商品详情链接,每行一个,可导入多个商品链接;点击开始采集;导出数据) . 无需手写任何规则,操作极其简单。
4.快速搜索,快捷操作体验,流畅愉悦。
5、具有自动升级功能:新版本正式发布后,客户端打开会自动升级到最新版本。
6、软件会持续保持模块更新。
指示
1、采集模式1(根据搜索页面设置)
(1) 点击“搜索页面设置”按钮,输入你要采集的关键词
(2)可以设置类别,设置完成后点击“Page Direct采集”按钮
(3)采集数据如图
(4)同时也可以点击“浏览视图切换开发”来切换浏览器的显示。
2. 采集 模式 2(导入 关键词采集)
(1) 导入你想要采集的关键词,多个关键词(每行一个)
(2) 点击“导入模式采集”按钮
(3)同时也可以点击“浏览视图切换开发”来切换浏览器的显示。
常见问题
1.支持的操作系统?
Win7 及更高版本(32 位或 64 位可用)。XP不支持。
2、试用版和正版有什么区别?
试用版有采集关键信息加密(24小时限时试用),无其他限制,购买前先试用。
由于质量通过测试,我们的软件可以免费试用。(不像很多同行不能体验或者做的够有限的蹩脚体验)。
3. 采集速度?
您的机器性能和带宽没有限制。
4、换机或软件丢失怎么办?
QQ和微信可以联系我们处理。仅针对我们的VIP客户,我们会在授权期内及时处理。
更新日志
最新版本:Android Oss 上传图片的使用
关联:
免责声明:本文为喵大师原创的阳光,转载请联系原作者授权。
前言
前段时间项目中上传的图片上传到阿里,把实现过程记录下来,方便以后查看。
参考资料:官方文档
%3A%2F%%2Fdocument_detail%2F32047.html%3Fspm%3D5176.doc32047.6.699.0vOwsi
配置
Android Studio 添加依赖
dependencies {
compile 'com.aliyun.dpa:oss-android-sdk:2.4.5'
compile 'com.squareup.okhttp3:okhttp:3.4.1'
compile 'com.squareup.okio:okio:1.9.0'
}
直接导入jar包(适用于Android studio或Eclipse)
1.在官网下载 sdk 包
2.解压后得到 jar 包,目前包括 aliyun-oss-sdk-android-x.x.x.jar、okhttp-3.x.x.jar 和 okio-1.x.x.jar
3.将以上 3 个 jar 包导入 libs 目录
权限设置
确保在AndroidManifest.xml文件中配置了这些权限,否则SDK将无法正常运行。
混淆设置
-keep class com.alibaba.sdk.android.oss.** { *; }
-dontwarn okio.**
-dontwarn org.apache.commons.codec.binary.**
实施过程
首先,为了安全起见,采用了STS认证方式,所要使用的数据全部从后台获取,然后应用到前台。
1、创建OSSClient(我这里命名为OssService)
OSSClient是OSS服务的Android客户端,它为调用者提供了一系列的方法,可以用来操作和管理存储空间(bucket)和文件(object)。
public class OssService {
private OSS oss;
private String bucket;
private picResultCallback callback;//回调接口
private String path=地址(后台告诉);
public OssService(OSS oss, String bucket,picResultCallback callback) {
this.oss = oss;
this.bucket = bucket;
this.callback=callback;
}
/**object字段为图片的上传地址(具体地址的前缀后端给,这个是拼起
*来的一个路径)
*localFile图片的本地地址
*mProgress 进度条
*img 显示图片的控件
*type 类型
*/
public void asyncPutImage(String object, final String localFile, final ProgressBar mProgress, final ImageView img,String type) {
if (object.equals("")) {
Log.w("AsyncPutImage", "ObjectNull");
return;
}
File file = new File(localFile);
if (!file.exists()) {
Log.w("AsyncPutImage", "FileNotExist");
Log.w("LocalFile", localFile);
return;
}
// 构造上传请求
PutObjectRequest put = new PutObjectRequest(bucket, object, localFile);
put.setCallbackParam(new HashMap() {
{
put("callbackUrl", path);
put("callbackBody", "filename=${object}&size=${size}&id=${x:id}&action=${x:action}");
//https://help.aliyun.com/document_detail/31989.html?spm=5176.doc31984.6.883.brskVg
}
});
HashMap hashMap=new HashMap();
hashMap.put("x:id",id);
hashMap.put("x:action",type);
put.setCallbackVars(hashMap);
// 异步上传时可以设置进度回调
put.setProgressCallback(new OSSProgressCallback() {
@Override
public void onProgress(PutObjectRequest request, long currentSize, long totalSize) {
int progress = (int) (100 * currentSize / totalSize);
mProgress.setProgress(progress);
}
});
OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallback() {
@Override
public void onSuccess(PutObjectRequest request, final PutObjectResult result) {
Observable.just(result).observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1() {
@Override
public void call(PutObjectResult putObjectResult) {
mProgress.setVisibility(View.GONE);
img.setColorFilter(null);
callback.getPicData(result,localFile);
}
});
}
@Override
public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
String info = "";
// 请求异常
if (clientExcepion != null) {
// 本地异常如网络异常等
clientExcepion.printStackTrace();
info = clientExcepion.toString();
}
if (serviceException != null) {
// 服务异常
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("RequestId", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("RawMessage", serviceException.getRawMessage());
info = serviceException.toString();
}
}
});
}
//成功的回调接口
public interface picResultCallback {
void getPicData(PutObjectResult data,String oldPath);
}
}
2.实现OssService的方法(在activity中)
public OssService initOSS(String endpoint, String bucket) {
OSSCredentialProvider credentialProvider;
credentialProvider = new STSGetter(tokenBean);
//设置网络参数
ClientConfiguration conf = new ClientConfiguration();
conf.setConnectionTimeout(15 * 1000); // 连接超时,默认15秒
conf.setSocketTimeout(15 * 1000); // socket超时,默认15秒
conf.setMaxConcurrentRequest(5); // 最大并发请求书,默认5个
conf.setMaxErrorRetry(2); // 失败后最大重试次数,默认2次
OSS oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider, conf);
return new OssService(oss, bucket, this);
}
3、重载OSSFederationCredentialProvider生成自己获取STS的函数(一般自动获取token写在这里,在getFederationToken()方法中,告诉它获取token的规则即可)
1>官方演示代码(自动更新token)
public class OSSAuthCredentialsProvider extends OSSFederationCredentialProvider {
private String mAuthServerUrl;
private AuthDecoder mDecoder;
public OSSAuthCredentialsProvider(String authServerUrl) {
this.mAuthServerUrl = authServerUrl;
}
/**
* set auth server url
* @param authServerUrl
*/
public void setAuthServerUrl(String authServerUrl) {
this.mAuthServerUrl = authServerUrl;
}
/**
* set response data decoder
* @param decoder
*/
public void setDecoder(AuthDecoder decoder) {
this.mDecoder = decoder;
}
@Override
public OSSFederationToken getFederationToken() throws ClientException {
OSSFederationToken authToken;
String authData;
try {
URL stsUrl = new URL(mAuthServerUrl);
HttpURLConnection conn = (HttpURLConnection) stsUrl.openConnection();
conn.setConnectTimeout(10000);
InputStream input = conn.getInputStream();
authData = IOUtils.readStreamAsString(input, OSSConstants.DEFAULT_CHARSET_NAME);
if (mDecoder != null) {
authData = mDecoder.decode(authData);
}
JSONObject jsonObj = new JSONObject(authData);
int statusCode = jsonObj.getInt("StatusCode");
if (statusCode == 200) {
String ak = jsonObj.getString("AccessKeyId");
String sk = jsonObj.getString("AccessKeySecret");
String token = jsonObj.getString("SecurityToken");
String expiration = jsonObj.getString("Expiration");
authToken = new OSSFederationToken(ak, sk, token, expiration);
} else {
String errorCode = jsonObj.getString("ErrorCode");
String errorMessage = jsonObj.getString("ErrorMessage");
throw new ClientException("ErrorCode: " + errorCode + "| ErrorMessage: " + errorMessage);
}
return authToken;
} catch (Exception e) {
throw new ClientException(e);
}
}
public interface AuthDecoder {
String decode(String data);
}
}
2> 自己的代码(因为我的数据都是从后台获取的,结合rxjava,没有想到返回数据的方式,所以采用了手动更新token的方式)
手动更新token的具体操作:
首先,令牌的值存储在 MyApp 中。第一次进入需要使用token的界面时,先获取token的值更新MyApp中的值,记录当前时间。如果下次进入需要再次使用token的界面,判断时间是否超时,超时后重新请求token更新token的值。
public class STSGetter extends OSSFederationCredentialProvider {
private OSSFederationToken ossFederationToken;
String ak;
String sk;
String token ;
String expiration ;
public STSGetter(TokenBean bean) {
this.ak = bean.getCredentials().getAccessKeyId();
this.sk = bean.getCredentials().getAccessKeySecret();
this.token = bean.getCredentials().getSecurityToken();
this.expiration = bean.getCredentials().getExpiration();
}
public OSSFederationToken getFederationToken() {
return new OSSFederationToken(ak,sk,token,expiration);
}
}
4.实例化OSSClient并调用上传图片方法
//实例化OSSClient (自己是在onCreate()中实例化的,当然考虑到token的过期问题,也有在onResume()中再次实例化一次)
ossService = initOSS(tokenBean.getBucket().getEndPoint(), tokenBean.getBucket().getBucketName());
//上传图片,需要根据自己的逻辑传参数
ossService.asyncPutImage(图片在阿里上的存储路径, 本地路径, ...);
5.回调处理图片逻辑
/**
* 对图片上传回来的数据进行处理
* @param data
*/
@Override
public void getPicData(PutObjectResult data, String oldPath) {
Gson gson = new Gson();
OssUploadImage uploadImage = gson.fromJson(data.getServerCallbackReturnBody(), OssUploadImage.class);
........逻辑自己写吧
}
~~喵印