Ollama+Llama-3.2-3B实战:快速搭建本地写作助手,帮你写邮件、周报、文案
2026/4/15 7:29:11
| 平台 | 申请地址 | 核心凭证 | 关键说明 |
|---|---|---|---|
| 1688 开放平台 | https://open.1688.com/ | appKey、appSecret | 需企业认证,开通商品详情接口 |
| 马帮 ERP | https://api.mabang.com/ | app_id、app_secret | 申请采集 / 商品同步接口权限 |
| 店小秘 | https://open.dianxiaomi.com/ | appKey、appSecret | 配置 IP 白名单,开通采集接口 |
| 芒果采集 | 联系芒果采集服务商 | token/API 密钥、接口地址 | 第三方工具,接口为定制化 |
xml
<dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.10.0</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>2.0.32</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.15</version> </dependency>1688 开放平台核心接口:taobao.open.supply.center.product.detail.get(根据商品 ID / 链接获取详情)
java
运行
import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import org.apache.commons.codec.digest.DigestUtils; import com.alibaba.fastjson.JSONObject; import java.io.IOException; import java.util.*; public class Ali1688Collector { // 1688配置 private static final String APP_KEY = "你的1688appKey"; private static final String APP_SECRET = "你的1688appSecret"; private static final String API_URL = "https://gw.open.1688.com/openapi/param2/1/taobao.open.supply.center.product.detail.get/"+APP_KEY; // 生成1688签名 private static String generateSign(Map<String, String> params) { // 1. 参数按ASCII升序排序 List<String> keys = new ArrayList<>(params.keySet()); Collections.sort(keys); // 2. 拼接参数字符串 StringBuilder sb = new StringBuilder(); for (String key : keys) { sb.append(key).append(params.get(key)); } // 3. 首尾拼接appSecret并MD5加密 sb.insert(0, APP_SECRET); sb.append(APP_SECRET); return DigestUtils.md5Hex(sb.toString()).toUpperCase(); } // 采集1688商品详情 public static JSONObject collect1688Product(String productId) throws IOException { OkHttpClient client = new OkHttpClient(); // 构造请求参数 Map<String, String> params = new HashMap<>(); params.put("method", "taobao.open.supply.center.product.detail.get"); params.put("app_key", APP_KEY); params.put("timestamp", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); params.put("format", "json"); params.put("v", "2.0"); params.put("sign_method", "md5"); params.put("product_id", productId); // 1688商品ID // 生成签名 params.put("sign", generateSign(params)); // 构造请求URL StringBuilder urlBuilder = new StringBuilder(API_URL); urlBuilder.append("?"); for (Map.Entry<String, String> entry : params.entrySet()) { urlBuilder.append(entry.getKey()).append("=").append(entry.getValue()).append("&"); } String url = urlBuilder.substring(0, urlBuilder.length() - 1); // 发送请求 Request request = new Request.Builder().url(url).get().build(); Response response = client.newCall(request).execute(); // 解析返回结果 if (response.isSuccessful() && response.body() != null) { String result = response.body().string(); return JSONObject.parseObject(result); } else { throw new IOException("1688 API请求失败:" + response.code()); } } public static void main(String[] args) throws IOException { JSONObject productInfo = collect1688Product("123456789"); // 替换为真实商品ID System.out.println("1688商品信息:" + productInfo.toJSONString()); } }php
运行
<?php class Ali1688Collector { private $appKey = "你的1688appKey"; private $appSecret = "你的1688appSecret"; private $apiUrl = "https://gw.open.1688.com/openapi/param2/1/taobao.open.supply.center.product.detail.get/"; // 生成1688签名 private function generateSign($params) { // 1. 参数按ASCII升序排序 ksort($params); // 2. 拼接参数字符串 $signStr = ''; foreach ($params as $key => $value) { $signStr .= $key . $value; } // 3. 首尾拼接appSecret并MD5加密 $signStr = $this->appSecret . $signStr . $this->appSecret; return strtoupper(md5($signStr)); } // 采集1688商品详情 public function collect1688Product($productId) { // 构造请求参数 $params = [ 'method' => 'taobao.open.supply.center.product.detail.get', 'app_key' => $this->appKey, 'timestamp' => date('Y-m-d H:i:s'), 'format' => 'json', 'v' => '2.0', 'sign_method' => 'md5', 'product_id' => $productId ]; // 生成签名 $params['sign'] = $this->generateSign($params); // 构造请求URL $url = $this->apiUrl . $this->appKey . '?' . http_build_query($params); // 发送请求 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $response = curl_exec($ch); curl_close($ch); // 解析结果 if ($response) { return json_decode($response, true); } else { throw new Exception("1688 API请求失败"); } } } // 调用示例 try { $collector = new Ali1688Collector(); $productInfo = $collector->collect1688Product("123456789"); // 替换为真实商品ID var_dump("1688商品信息:", $productInfo); } catch (Exception $e) { echo "错误:" . $e->getMessage(); } ?>马帮 API 基于 RESTful 风格,核心是签名验证 + JSON 请求,以下为商品采集同步示例:
java
运行
import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; import com.alibaba.fastjson.JSONObject; import java.io.IOException; import java.util.HashMap; import java.util.Map; public class MabangApiClient { private static final String MABANG_APP_ID = "你的马帮app_id"; private static final String MABANG_APP_SECRET = "你的马帮app_secret"; private static final String MABANG_API_URL = "https://api.mabang.com/v1/product/collect"; // 马帮采集接口 // 马帮API请求 public static JSONObject collectByMabang(String productUrl) throws IOException { OkHttpClient client = new OkHttpClient(); MediaType JSON = MediaType.parse("application/json; charset=utf-8"); // 构造请求体 Map<String, Object> requestBody = new HashMap<>(); requestBody.put("app_id", MABANG_APP_ID); requestBody.put("timestamp", System.currentTimeMillis() / 1000); // 时间戳(秒) requestBody.put("product_url", productUrl); // 1688商品链接 // 生成签名(马帮签名规则:MD5(app_id+timestamp+app_secret)) String signStr = MABANG_APP_ID + requestBody.get("timestamp") + MABANG_APP_SECRET; String sign = org.apache.commons.codec.digest.DigestUtils.md5Hex(signStr); requestBody.put("sign", sign); // 构建请求 RequestBody body = RequestBody.create(JSONObject.toJSONString(requestBody), JSON); Request request = new Request.Builder() .url(MABANG_API_URL) .post(body) .build(); Response response = client.newCall(request).execute(); if (response.isSuccessful() && response.body() != null) { String result = response.body().string(); return JSONObject.parseObject(result); } else { throw new IOException("马帮API请求失败:" + response.code()); } } public static void main(String[] args) throws IOException { JSONObject result = collectByMabang("https://detail.1688.com/offer/123456789.html"); System.out.println("马帮采集结果:" + result.toJSONString()); } }php
运行
<?php class MabangApiClient { private $appId = "你的马帮app_id"; private $appSecret = "你的马帮app_secret"; private $apiUrl = "https://api.mabang.com/v1/product/collect"; public function collectByMabang($productUrl) { // 构造请求参数 $timestamp = time(); $sign = md5($this->appId . $timestamp . $this->appSecret); $postData = [ 'app_id' => $this->appId, 'timestamp' => $timestamp, 'product_url' => $productUrl, 'sign' => $sign ]; // 发送POST请求 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $this->apiUrl); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postData)); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $response = curl_exec($ch); curl_close($ch); return json_decode($response, true); } } // 调用示例 $mabangClient = new MabangApiClient(); $result = $mabangClient->collectByMabang("https://detail.1688.com/offer/123456789.html"); var_dump("马帮采集结果:", $result); ?>店小秘 API 签名规则为 HMAC-SHA256,以下为商品采集示例:
java
运行
import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import com.alibaba.fastjson.JSONObject; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.Base64; import java.util.HashMap; import java.util.Map; public class DianXiaoMiApiClient { private static final String DXMI_APP_KEY = "你的店小秘appKey"; private static final String DXMI_APP_SECRET = "你的店小秘appSecret"; private static final String DXMI_API_URL = "https://open.dianxiaomi.com/api/v2/product/collect"; // 生成HMAC-SHA256签名 private static String generateHmacSign(String data) throws Exception { Mac mac = Mac.getInstance("HmacSHA256"); SecretKeySpec keySpec = new SecretKeySpec(DXMI_APP_SECRET.getBytes(StandardCharsets.UTF_8), "HmacSHA256"); mac.init(keySpec); byte[] signBytes = mac.doFinal(data.getBytes(StandardCharsets.UTF_8)); return Base64.getEncoder().encodeToString(signBytes); } public static JSONObject collectByDxmi(String productUrl) throws Exception { OkHttpClient client = new OkHttpClient(); long timestamp = System.currentTimeMillis(); // 构造签名原文 String signData = DXMI_APP_KEY + timestamp + productUrl; String sign = generateHmacSign(signData); // 构造请求参数 Map<String, String> params = new HashMap<>(); params.put("appKey", DXMI_APP_KEY); params.put("timestamp", String.valueOf(timestamp)); params.put("sign", sign); params.put("productUrl", productUrl); // 构造URL StringBuilder urlBuilder = new StringBuilder(DXMI_API_URL); urlBuilder.append("?"); for (Map.Entry<String, String> entry : params.entrySet()) { urlBuilder.append(entry.getKey()).append("=").append(entry.getValue()).append("&"); } String url = urlBuilder.substring(0, urlBuilder.length() - 1); Request request = new Request.Builder().url(url).get().build(); Response response = client.newCall(request).execute(); if (response.isSuccessful() && response.body() != null) { return JSONObject.parseObject(response.body().string()); } else { throw new IOException("店小秘API请求失败:" + response.code()); } } public static void main(String[] args) throws Exception { JSONObject result = collectByDxmi("https://detail.1688.com/offer/123456789.html"); System.out.println("店小秘采集结果:" + result.toJSONString()); } }php
运行
<?php class DianXiaoMiApiClient { private $appKey = "你的店小秘appKey"; private $appSecret = "你的店小秘appSecret"; private $apiUrl = "https://open.dianxiaomi.com/api/v2/product/collect"; // 生成HMAC-SHA256签名 private function generateHmacSign($data) { return base64_encode(hash_hmac('sha256', $data, $this->appSecret, true)); } public function collectByDxmi($productUrl) { $timestamp = time() * 1000; // 毫秒级时间戳 $signData = $this->appKey . $timestamp . $productUrl; $sign = $this->generateHmacSign($signData); // 构造请求参数 $params = [ 'appKey' => $this->appKey, 'timestamp' => $timestamp, 'sign' => $sign, 'productUrl' => $productUrl ]; $url = $this->apiUrl . '?' . http_build_query($params); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $response = curl_exec($ch); curl_close($ch); return json_decode($response, true); } } // 调用示例 $dxmiClient = new DianXiaoMiApiClient(); $result = $dxmiClient->collectByDxmi("https://detail.1688.com/offer/123456789.html"); var_dump("店小秘采集结果:", $result); ?>芒果采集为第三方工具,接口格式需以服务商提供为准,以下为通用 HTTP 请求示例:
java
运行
import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import com.alibaba.fastjson.JSONObject; import java.io.IOException; import java.util.HashMap; import java.util.Map; public class MangoCollector { private static final String MANGO_API_URL = "芒果采集API地址"; private static final String MANGO_TOKEN = "你的芒果采集token"; public static JSONObject collectByMango(String productUrl) throws IOException { OkHttpClient client = new OkHttpClient(); // 构造请求参数(以服务商要求为准) Map<String, String> params = new HashMap<>(); params.put("token", MANGO_TOKEN); params.put("url", productUrl); params.put("type", "1688"); // 采集类型 // 构造URL StringBuilder urlBuilder = new StringBuilder(MANGO_API_URL); urlBuilder.append("?"); for (Map.Entry<String, String> entry : params.entrySet()) { urlBuilder.append(entry.getKey()).append("=").append(entry.getValue()).append("&"); } String url = urlBuilder.substring(0, urlBuilder.length() - 1); Request request = new Request.Builder().url(url).get().build(); Response response = client.newCall(request).execute(); if (response.isSuccessful() && response.body() != null) { return JSONObject.parseObject(response.body().string()); } else { throw new IOException("芒果采集API请求失败:" + response.code()); } } public static void main(String[] args) throws IOException { JSONObject result = collectByMango("https://detail.1688.com/offer/123456789.html"); System.out.println("芒果采集结果:" + result.toJSONString()); } }php
运行
<?php class MangoCollector { private $apiUrl = "芒果采集API地址"; private $token = "你的芒果采集token"; public function collectByMango($productUrl) { $params = [ 'token' => $this->token, 'url' => $productUrl, 'type' => '1688' ]; $url = $this->apiUrl . '?' . http_build_query($params); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $response = curl_exec($ch); curl_close($ch); return json_decode($response, true); } } // 调用示例 $mangoClient = new MangoCollector(); $result = $mangoClient->collectByMango("https://detail.1688.com/offer/123456789.html"); var_dump("芒果采集结果:", $result); ?>error_response),确保程序健壮性。