Crawler.cs 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. using dodohold.core;
  2. using Sayaka.Common;
  3. using System.Text.RegularExpressions;
  4. namespace molilian.core
  5. {
  6. public class PddTransferUrlResult
  7. {
  8. public string multiGroupShortUrl { get; set; } = string.Empty;
  9. public string multiGroupUrl { get; set; } = string.Empty;
  10. public string shortUrl { get; set; } = string.Empty;
  11. public string url { get; set; } = string.Empty;
  12. }
  13. public class PddTransferUrlResponse
  14. {
  15. public int errorCode { get; set; }
  16. public string errorMsg { get; set; } = string.Empty;
  17. public bool success { get; set; } = false;
  18. public PddTransferUrlResult result { get; set; } = new();
  19. }
  20. public class PddCreatePromotionUrlResult
  21. {
  22. public string multiGroupShortUrl { get; set; } = string.Empty;
  23. public string multiGroupUrl { get; set; } = string.Empty;
  24. public string shortUrl { get; set; } = string.Empty;
  25. public string url { get; set; } = string.Empty;
  26. }
  27. public class PddCreatePromotionUrlResponse
  28. {
  29. public int errorCode { get; set; }
  30. public string errorMsg { get; set; } = string.Empty;
  31. public bool success { get; set; } = false;
  32. public PddCreatePromotionUrlResult result { get; set; } = new();
  33. }
  34. public partial class PddUnionPlus
  35. {
  36. public async Task<PddDataDTO> transferUrl(PddDataDTO result, string sourceUrl, CancellationToken cancellationToken = default)
  37. {
  38. var ts = DateTime.Now.Convert2UnixTimestamp(true);
  39. string cookies = _account.cookies.Trim();
  40. #if DEBUG
  41. //cookies = "DDJB_PASS_ID=bedd7aa97aff1edfe392ad8d2c8f1dc5; DDJB_LOGIN_SCENE=0";
  42. #endif
  43. string useragent = ProviderFakeUserAgent.RandomComputer;
  44. string url = "https://jinbao.pinduoduo.com/network/api/promotion/transferUrl";
  45. //{"pid":"13848803_189356569","sourceUrl":"https://p.pinduoduo.com/1OAsct0r"}
  46. var args = new
  47. {
  48. _account.pid,
  49. sourceUrl = sourceUrl.UrlDecode(),
  50. };
  51. string data = args.Convert2Json();
  52. WebClientUtility client = new WebClientUtility();
  53. client.Proxy = _proxy;
  54. #if DEBUG
  55. client.Proxy = null;
  56. #endif
  57. client.SetContentType("application/json");
  58. client.AddHeaders("Referer", "https://jinbao.pinduoduo.com/promotion/url-promotion");
  59. client.AddHeaders("Origin", "https://jinbao.pinduoduo.com");
  60. client.UserAgent = useragent;
  61. client.AddHeaders("Cookie", cookies);
  62. client.Post(data);
  63. var response = await client.RequestAsync(url, "POST", cancellationToken);
  64. string body = response.Body();
  65. //{"success":false,"errorCode":43001,"errorMsg":"会话已过期","result":null}
  66. var root = body.Convert2Object<PddTransferUrlResponse>();
  67. string message = string.Empty;
  68. if (!root.success)
  69. {
  70. if ("30007".Equals(root.errorCode))
  71. {
  72. PddPoolCore.AccountRisk(_account);
  73. }
  74. message = $"{root.errorCode}:{root.errorMsg}";
  75. result.success = false;
  76. result.message = "转链失败";
  77. result.reason = message;
  78. _ = new LoggerLibrary("PddUnion", "transferUrl").Info(body).SaveAsync();
  79. return result;
  80. }
  81. if (string.IsNullOrEmpty(root.result?.multiGroupShortUrl))
  82. {
  83. result.success = false;
  84. result.message = "转链失败";
  85. result.reason = "无法转链";
  86. //_ = new LoggerLibrary("PddUnion", "transferUrl").Info(body).SaveAsync();
  87. return result;
  88. }
  89. if (!string.IsNullOrEmpty(root.result?.url))
  90. {
  91. result.itemId = root.result?.url.GetContentPart("goods_id=", "&");
  92. }
  93. result.success = true;
  94. result.message = "OK";
  95. result.link_type = LinkTypeEnum.goods;
  96. result.shortLinkurl = root.result?.multiGroupShortUrl;
  97. result.content = result.shortLinkurl;
  98. result.deeplink_url = GetDeeplink(result.shortLinkurl);
  99. return result;
  100. }
  101. public async Task<PddDataDTO> createPromotionUrl(PddDataDTO result, string sourceUrl, CancellationToken cancellationToken = default)
  102. {
  103. var ts = DateTime.Now.Convert2UnixTimestamp(true);
  104. string cookies = _account.cookies.Trim();
  105. string useragent = ProviderFakeUserAgent.RandomComputer;
  106. string url = "https://jinbao.pinduoduo.com/network/api/promotion/createPromotionUrl";
  107. //{"pid":"13848803_189356569","sourceUrl":"https://p.pinduoduo.com/1OAsct0r"}
  108. string goodsId = sourceUrl;
  109. var args = new
  110. {
  111. _account.pid,
  112. goodsId,
  113. generateOpenCoupon = true
  114. };
  115. /*
  116. {
  117. "mediaId": "9092702778",
  118. "pid": "13848803_189356569",
  119. "goodsId": "123",
  120. "generateOpenCoupon": true
  121. }
  122. */
  123. string data = args.Convert2Json();
  124. WebClientUtility client = new WebClientUtility();
  125. client.Proxy = _proxy;
  126. #if DEBUG
  127. client.Proxy = null;
  128. #endif
  129. client.SetContentType("application/json");
  130. client.AddHeaders("Referer", "https://jinbao.pinduoduo.com/promotion/url-promotion");
  131. client.AddHeaders("Origin", "https://jinbao.pinduoduo.com");
  132. client.UserAgent = useragent;
  133. client.AddHeaders("Cookie", cookies);
  134. client.Post(data);
  135. var response = await client.RequestAsync(url, "POST", cancellationToken);
  136. string body = response.Body();
  137. var root = body.Convert2Object<PddCreatePromotionUrlResponse>();
  138. string message = string.Empty;
  139. if (!root.success)
  140. {
  141. message = $"{root.errorCode}:{root.errorMsg}";
  142. result.success = false;
  143. result.message = "转链失败";
  144. result.reason = message;
  145. _ = new LoggerLibrary("PddUnion", "transferUrl").Info(body).SaveAsync();
  146. return result;
  147. }
  148. if (string.IsNullOrEmpty(root.result?.multiGroupShortUrl))
  149. {
  150. result.success = false;
  151. result.message = "转链失败";
  152. result.reason = "无法转链";
  153. //_ = new LoggerLibrary("PddUnion", "transferUrl").Info(body).SaveAsync();
  154. return result;
  155. }
  156. //goods_id=636365867069&pid=13848803_189356569&goods_sign=E9z2NkASdqlKuWDVwvfdqnADgCEqTQSt_JuMe2WC0G&zs_duo_id=25194414&cpsSign=CC_240807_13848803_189356569_fdbbdfa499058644becc9f8b3b7acaaf&_x_ddjb_act=
  157. if (!string.IsNullOrEmpty(root.result?.url))
  158. {
  159. result.itemId = root.result?.url.GetContentPart("goods_id=", "&");
  160. }
  161. result.success = true;
  162. result.message = "OK";
  163. result.link_type = LinkTypeEnum.goods;
  164. result.shortLinkurl = root.result?.multiGroupShortUrl;
  165. result.content = result.shortLinkurl;
  166. result.deeplink_url = GetDeeplink(result.shortLinkurl);
  167. return result;
  168. }
  169. }
  170. }