From f887666ce3b047d70b3689be04a90f6c9596c03d Mon Sep 17 00:00:00 2001
From: cshenfu <men883234@gmail.com>
Date: 星期二, 10 十二月 2024 15:15:43 +0800
Subject: [PATCH] 区分小红书cookie
---
test.txt | 0
app/src/main/java/com/shsening/autouploadvideos/SessionProfileActivity.kt | 4 -
.idea/deploymentTargetSelector.xml | 4
app/ttt.json | 23 +++++++
app/release/baselineProfiles/1/app-release.dm | 0
app/src/main/java/com/shsening/autouploadvideos/SessionProfileWebView.kt | 1
app/src/main/java/com/shsening/autouploadvideos/UploadSessionActivity.kt | 31 ++-------
app/src/main/java/com/shsening/autouploadvideos/action/ActionRedbook.kt | 19 ++----
/dev/null | 0
app/src/main/java/com/shsening/autouploadvideos/action/ActionShipinhao.kt | 4 +
app/src/main/java/com/shsening/autouploadvideos/CookieHelper.kt | 11 +--
app/release/baselineProfiles/0/app-release.dm | 0
app/src/main/java/com/shsening/autouploadvideos/Cookiehelper2.kt | 64 +++++++++++++++++++++
app/src/main/java/com/shsening/autouploadvideos/UploadFragment.kt | 4 +
app/src/main/java/com/shsening/autouploadvideos/action/ActionBilibili.kt | 2
15 files changed, 117 insertions(+), 50 deletions(-)
diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml
index f0ded44..24573fd 100644
--- a/.idea/deploymentTargetSelector.xml
+++ b/.idea/deploymentTargetSelector.xml
@@ -4,10 +4,10 @@
<selectionStates>
<SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" />
- <DropdownSelection timestamp="2024-11-27T11:37:15.668942400Z">
+ <DropdownSelection timestamp="2024-12-09T08:10:34.232180Z">
<Target type="DEFAULT_BOOT">
<handle>
- <DeviceId pluginId="Default" identifier="serial=127.0.0.1:5555;connection=03e18c1a" />
+ <DeviceId pluginId="PhysicalDevice" identifier="serial=xg4hkjgmhexwdawg" />
</handle>
</Target>
</DropdownSelection>
diff --git a/app/debug/app-debug.apk b/app/debug/app-debug.apk
deleted file mode 100644
index c7411eb..0000000
--- a/app/debug/app-debug.apk
+++ /dev/null
Binary files differ
diff --git a/app/release/app-release.apk b/app/release/app-release.apk
deleted file mode 100644
index 7b64ce2..0000000
--- a/app/release/app-release.apk
+++ /dev/null
Binary files differ
diff --git a/app/release/baselineProfiles/0/app-release.dm b/app/release/baselineProfiles/0/app-release.dm
index 978bfb0..05bf43b 100644
--- a/app/release/baselineProfiles/0/app-release.dm
+++ b/app/release/baselineProfiles/0/app-release.dm
Binary files differ
diff --git a/app/release/baselineProfiles/1/app-release.dm b/app/release/baselineProfiles/1/app-release.dm
index 058c788..d515ebd 100644
--- a/app/release/baselineProfiles/1/app-release.dm
+++ b/app/release/baselineProfiles/1/app-release.dm
Binary files differ
diff --git a/app/src/main/java/com/shsening/autouploadvideos/CookieHelper.kt b/app/src/main/java/com/shsening/autouploadvideos/CookieHelper.kt
index 0fef0ae..15c40a8 100644
--- a/app/src/main/java/com/shsening/autouploadvideos/CookieHelper.kt
+++ b/app/src/main/java/com/shsening/autouploadvideos/CookieHelper.kt
@@ -3,18 +3,13 @@
import android.util.Log
import android.webkit.CookieManager
import org.json.JSONObject
-
-
-
object CookieHelper {
private const val PREF_NAME = "CookieHelper"
-
-
-
fun saveSessionProfileUrlCookies(context: Context, sessionProfileId: String, url: String) {
try{
val cookies = CookieManager.getInstance().getCookie(url)
if (cookies != null) {
+ println("杩欐槸cookie"+cookies)
val sharedPreferences = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE)
val sessionCookiesMap = sharedPreferences.getString(sessionProfileId, "{}")
val sessionCookies = JSONObject(sessionCookiesMap!!)
@@ -26,15 +21,17 @@
Log.e("CookieHelper", "Failed to get cookies: ", e)
}
}
-
fun getAllSessionProfileCookies(context: Context, sessionProfileId: String): Map<String, String> {
val sharedPreferences = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE)
val sessionCookiesMap = sharedPreferences.getString(sessionProfileId, "{}")
val sessionCookies = JSONObject(sessionCookiesMap!!)
+ println("鏈�缁堢殑sessioncookies鏄�"+sessionCookies)
+ println("杩斿洖鐨勭粨鏋滄槸锛�"+sessionCookies.keys().asSequence().associateWith { sessionCookies.getString(it) })
return sessionCookies.keys().asSequence().associateWith { sessionCookies.getString(it) }
}
private fun getBaseUrl(url: String): String {
val uri = Uri.parse(url)
+ println("鏈�缁堣矾寰勶細${uri.scheme}://${uri.host}/")
return "${uri.scheme}://${uri.host}/"
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/shsening/autouploadvideos/Cookiehelper2.kt b/app/src/main/java/com/shsening/autouploadvideos/Cookiehelper2.kt
new file mode 100644
index 0000000..3142cc7
--- /dev/null
+++ b/app/src/main/java/com/shsening/autouploadvideos/Cookiehelper2.kt
@@ -0,0 +1,64 @@
+import android.content.Context
+import android.webkit.CookieManager
+import com.shsening.autouploadvideos.AppConfig
+import org.json.JSONObject
+
+object CookieHelper2 {
+ private const val PREF_NAME = "CookieHelper"
+
+ fun saveSessionProfileUrlCookies(context: Context, sessionProfileId: String, url: String, cookies: String) {
+ println("杩涙潵浜�"+cookies)
+ val sharedPreferences = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE)
+ val sessionCookiesMap = sharedPreferences.getString(sessionProfileId, "{}")
+ val sessionCookies = JSONObject(sessionCookiesMap!!)
+ sessionCookies.put(url, cookies)
+ sharedPreferences.edit().putString(sessionProfileId, sessionCookies.toString()).apply()
+ println("缁撴潫浜�")
+ }
+
+ fun getAllSessionProfileCookies(context: Context, sessionProfileId: String): Map<String, String> {
+ val sharedPreferences = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE)
+ val sessionCookiesMap = sharedPreferences.getString(sessionProfileId, "{}")
+ val sessionCookies = JSONObject(sessionCookiesMap!!)
+ return sessionCookies.keys().asSequence().associateWith { sessionCookies.getString(it) }
+ }
+
+ fun removeCookiesForUrl(url: String) {
+ val cookieManager = CookieManager.getInstance()
+ val cookies = cookieManager.getCookie(url) // 鑾峰彇鐗瑰畾 URL 鐨勬墍鏈� Cookie
+ if (cookies != null) {
+ val cookieArray = cookies.split(";") // 鎸夊垎鍙峰垎闅斿涓� Cookie
+ for (cookie in cookieArray) {
+ val cookieParts = cookie.split("=")
+ if (cookieParts.size > 0) {
+ val cookieName = cookieParts[0].trim()
+ // 璁剧疆涓�涓繃鏈熺殑 Cookie 瑕嗙洊鍘熸潵鐨�
+ cookieManager.setCookie(url, "$cookieName=; Expires=Thu, 01 Jan 1970 00:00:00 GMT")
+ }
+ }
+ // 纭繚灏嗘洿鏀瑰悓姝ュ埌瀛樺偍涓�
+ cookieManager.flush()
+ }
+ }
+
+ fun removeCookieForAllPlatform(){
+ AppConfig.SESSION_PROFILE_PALTFORM_LISTS.forEach { item ->
+ removeCookiesForUrl(item.url)
+ }
+ }
+
+ fun saveSessionCookies(context: Context,sessionProfileId:String) {
+ var cookieManager = CookieManager.getInstance()
+ AppConfig.SESSION_PROFILE_PALTFORM_LISTS.forEach { item ->
+ val cookies = cookieManager.getCookie(item.url)
+ if (cookies != null) {
+ saveSessionProfileUrlCookies(
+ context,
+ sessionProfileId,
+ item.url,
+ cookies
+ )
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/shsening/autouploadvideos/SessionProfileActivity.kt b/app/src/main/java/com/shsening/autouploadvideos/SessionProfileActivity.kt
index 10016fc..80f71da 100644
--- a/app/src/main/java/com/shsening/autouploadvideos/SessionProfileActivity.kt
+++ b/app/src/main/java/com/shsening/autouploadvideos/SessionProfileActivity.kt
@@ -1,7 +1,6 @@
package com.shsening.autouploadvideos
import CookieHelper
-import CookieHelper.saveSessionProfileUrlCookies
import Profile
import SessionProfile
import SessionProfileManager
@@ -46,7 +45,6 @@
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_session_profile)
activityReference = this
-
// 鑾峰彇浼犲叆鐨� SessionProfile
sessionProfile = intent.getSerializableExtra("sessionProfile") as? SessionProfile
?: SessionProfile(
@@ -56,7 +54,6 @@
lastUploadTime = "",
profiles = mutableListOf()
)
-
if (sessionProfile.id == ""){
isNewSessionProfile = true
sessionProfile.id = UUID.randomUUID().toString().replace("-", "")
@@ -64,7 +61,6 @@
}else {
findViewById<TextView>(R.id.txt_session_id).text = sessionProfile.id
}
-
editName = findViewById(R.id.edit_name)
findViewById<TextView>(R.id.edit_name).text = sessionProfile.name
diff --git a/app/src/main/java/com/shsening/autouploadvideos/SessionProfileWebView.kt b/app/src/main/java/com/shsening/autouploadvideos/SessionProfileWebView.kt
index f319772..4964485 100644
--- a/app/src/main/java/com/shsening/autouploadvideos/SessionProfileWebView.kt
+++ b/app/src/main/java/com/shsening/autouploadvideos/SessionProfileWebView.kt
@@ -46,6 +46,7 @@
CookieManager.getInstance().removeAllCookies(null)
CookieManager.getInstance().flush()
val sessionCookies = CookieHelper.getAllSessionProfileCookies(context, sessionProfileId)
+ println("杩欐槸session cookie"+sessionCookies)
for ((url, cookies) in sessionCookies) {
splitCookieStringAndSetCookie(url,cookies)
}
diff --git a/app/src/main/java/com/shsening/autouploadvideos/UploadFragment.kt b/app/src/main/java/com/shsening/autouploadvideos/UploadFragment.kt
index 2f30566..22b1edf 100644
--- a/app/src/main/java/com/shsening/autouploadvideos/UploadFragment.kt
+++ b/app/src/main/java/com/shsening/autouploadvideos/UploadFragment.kt
@@ -22,6 +22,7 @@
import com.shsening.autouploadvideos.action.ActionDouyin
import com.shsening.autouploadvideos.action.ActionKuaishou
import com.shsening.autouploadvideos.action.ActionShipinhao
+import com.shsening.autouploadvideos.action.ActionRedbook
import com.shsening.autouploadvideos.utils.Utils
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
@@ -169,6 +170,9 @@
}
AppConfig.UPLOADSERVERTYPE_XIAOHONGSHU -> {
+ val actionXiaohongshu =
+ ActionRedbook(this, requireContext(), threadHandler, currentUploadVideoInfo)
+ actionXiaohongshu.checkIfContentLoaded()
}
diff --git a/app/src/main/java/com/shsening/autouploadvideos/UploadSessionActivity.kt b/app/src/main/java/com/shsening/autouploadvideos/UploadSessionActivity.kt
index 573fe83..3ff8236 100644
--- a/app/src/main/java/com/shsening/autouploadvideos/UploadSessionActivity.kt
+++ b/app/src/main/java/com/shsening/autouploadvideos/UploadSessionActivity.kt
@@ -1,11 +1,10 @@
package com.shsening.autouploadvideos
import CookieHelper
-import Profile
+import CookieHelper2
import SessionProfile
import SessionProfileManager
-import android.app.Activity
-import android.content.Intent
+import android.graphics.Bitmap
import android.net.Uri
import android.os.Bundle
import android.os.Handler
@@ -17,13 +16,7 @@
import android.webkit.WebChromeClient
import android.webkit.WebView
import android.webkit.WebViewClient
-import android.widget.ArrayAdapter
import android.widget.Button
-import android.widget.EditText
-import android.widget.LinearLayout
-import android.widget.ProgressBar
-import android.widget.Spinner
-import android.widget.Switch
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
@@ -31,27 +24,18 @@
import com.shsening.autouploadvideos.AppConfig.Companion.SESSION_PROFILE_PALTFORM_LISTS
import com.shsening.autouploadvideos.action.ActionDouyin
import com.shsening.autouploadvideos.action.ActionKuaishou
+import com.shsening.autouploadvideos.action.ActionRedbook
import com.shsening.autouploadvideos.action.ActionShipinhao
import com.shsening.autouploadvideos.utils.DownloadHelper
-import com.shsening.autouploadvideos.utils.DownloadReceiver
import com.shsening.autouploadvideos.utils.Utils
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.launch
-import okhttp3.Call
-import okhttp3.Callback
-import okhttp3.OkHttpClient
-import okhttp3.Request
-import okhttp3.Response
-import org.json.JSONArray
import java.io.File
-import java.io.IOException
import java.util.LinkedList
import java.util.Queue
-import java.util.UUID
+
class UploadSessionActivity : AppCompatActivity() {
-
+ private var RedbooklUrl: String? = "https://creator.xiaohongshu.com/publish/publish?from=menu"
+ private var DingyuehaolUrl: String? = null
private lateinit var sessionProfileManager: SessionProfileManager
lateinit var sessionProfileWebView:SessionProfileWebView
@@ -99,11 +83,12 @@
override fun onPageStarted(
view: WebView?,
url: String?,
- favicon: android.graphics.Bitmap?
+ favicon: Bitmap?
) {
super.onPageStarted(view, url, favicon)
}
override fun onPageFinished(view: WebView?, url: String?) {
+ println("杩欐槸鍏朵粬椤甸潰"+url)
super.onPageFinished(view, url)
view?.requestFocus() // 纭繚 WebView 鑾峰彇鐒︾偣
//inject action
diff --git a/app/src/main/java/com/shsening/autouploadvideos/action/ActionBilibili.kt b/app/src/main/java/com/shsening/autouploadvideos/action/ActionBilibili.kt
index 8dee10a..51d040f 100644
--- a/app/src/main/java/com/shsening/autouploadvideos/action/ActionBilibili.kt
+++ b/app/src/main/java/com/shsening/autouploadvideos/action/ActionBilibili.kt
@@ -1,4 +1,4 @@
-package com.shsening.autouploadvideos
+package com.shsening.autouploadvideos.action
import android.app.Instrumentation
diff --git a/app/src/main/java/com/shsening/autouploadvideos/action/ActionRedbook.kt b/app/src/main/java/com/shsening/autouploadvideos/action/ActionRedbook.kt
index 5c11e4f..7c51459 100644
--- a/app/src/main/java/com/shsening/autouploadvideos/action/ActionRedbook.kt
+++ b/app/src/main/java/com/shsening/autouploadvideos/action/ActionRedbook.kt
@@ -1,4 +1,4 @@
-package com.shsening.autouploadvideos
+package com.shsening.autouploadvideos.action
import android.app.Instrumentation
@@ -8,6 +8,8 @@
import android.os.Bundle
import android.os.Looper
import androidx.appcompat.app.AppCompatActivity
+import com.shsening.autouploadvideos.UploadSessionActivity
+import com.shsening.autouploadvideos.WebviewUtils
import com.shsening.autouploadvideos.action.PlatformActionInterface
import com.shsening.autouploadvideos.utils.Utils
@@ -33,14 +35,6 @@
private fun updatePostDescription(){
WebviewUtils.addValueToInput(webView,"#publish-container > div > div.body > div.content > div.input.titleInput > div.d-input-wrapper.d-inline-block.c-input_inner > div > input",videoInfo.title)
WebviewUtils.addValueToDiv(webView,"#quillEditor > div > p",videoInfo.description)
- WebviewUtils.simpleElementClick(webView,"#topicBtn")
- SystemClock.sleep(500)
- WebviewUtils.simpleElementClick(webView,"#quill-mention-item-0")
- WebviewUtils.simpleElementClick(webView,"#topicBtn")
- SystemClock.sleep(500)
- WebviewUtils.simpleElementClick(webView,"#quill-mention-item-1")
-
-// WebviewUtils.simpleElementClick(webView,"#el-id-3410-26 > label:nth-child(1)")
WebviewUtils.simpleElementClick(webView,"html > body > div:nth-of-type(1) > div > div:nth-of-type(2) > div > div:nth-of-type(2) > main > div:nth-of-type(3) > div > div > div:nth-of-type(1) > div > div > div > div:nth-of-type(2) > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(10) > div > div:nth-of-type(5) > div:nth-of-type(2) > label:nth-of-type(2)")
addValueToDatePickerInput(true,"html > body > div:nth-of-type(1) > div > div:nth-of-type(2) > div > div:nth-of-type(2) > main > div:nth-of-type(3) > div > div > div:nth-of-type(1) > div > div > div > div:nth-of-type(2) > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(10) > div > div:nth-of-type(5) > div:nth-of-type(2) > div > div:nth-of-type(1) > div",videoInfo.datetime)
// 鍦ㄤ富绾跨▼涓缃欢杩熸墽琛�
@@ -75,9 +69,12 @@
webView.evaluateJavascript(jsCode_CheckVideoUploadFinished) { result ->
if (result == "true") {
// 绛夊緟瑙嗛妫�娴嬪拰鐢熸垚灏侀潰
+// WebviewUtils.simpleElementClick(webView,"#web > div > div > div > div.upload-content > div.upload-wrapper > div > input")
+ println("33333333333333333333333333333333333333")
threadHandler.postDelayed({updatePostDescription()},3000)
} else {
+ println("11111111111111111111111")
// 鍏冪礌涓嶅瓨鍦紝1绉掑悗鍐嶆妫�鏌�
webView.postDelayed({
checkVideoUploadFinished()
@@ -86,7 +83,6 @@
}
}, 1000) // 姣忕妫�鏌ヤ竴娆�
}
-
private fun checkVideoPublishFinished(){
webView.postDelayed({
webView.evaluateJavascript(jsCode_PublishVideo_Finished) { result ->
@@ -152,11 +148,9 @@
val displayMetrics = activity.resources.displayMetrics
val width = displayMetrics.widthPixels
val height = displayMetrics.heightPixels
-
val startX = width.toFloat() * 0.9f // 浠庡彸渚ф粦鍔�
val endX = width.toFloat() * 0.1f // 婊戝姩鍒板乏渚�
val y = height / 3f // Y 鍧愭爣鍦ㄥ睆骞曚腑闂�
-
Thread {
Utils.instrumentationSwipe(instrumentation, startX, y, endX, y)
SystemClock.sleep(500)
@@ -164,6 +158,7 @@
SystemClock.sleep(500)
Utils.instrumentationClick(instrumentation, width / 2f, height * 2 / 4f)
// back to main thread
+
threadHandler.post {
checkVideoUploadFinished()
}
diff --git a/app/src/main/java/com/shsening/autouploadvideos/action/ActionShipinhao.kt b/app/src/main/java/com/shsening/autouploadvideos/action/ActionShipinhao.kt
index 89083f4..444833c 100644
--- a/app/src/main/java/com/shsening/autouploadvideos/action/ActionShipinhao.kt
+++ b/app/src/main/java/com/shsening/autouploadvideos/action/ActionShipinhao.kt
@@ -31,6 +31,7 @@
* Title,description(including # and @ ) publish datetime etc
*/
private fun updatePostDescription(){
+ WebviewUtils.addValueToInput(webView,"#container-wrap > div.container-center > div > div > div.main-body-wrap.post-create > div.main-body > div > div.post-edit-wrap.material-edit-wrap > div.form > div:nth-child(8) > div.form-item-body.short-title-wrap > div > div > span > input",videoInfo.title)
WebviewUtils.addValueToDiv(
webView,
"#container-wrap > div.container-center > div > div > div.main-body-wrap.post-create > div.main-body > div > div.post-edit-wrap.material-edit-wrap > div.form > div:nth-child(2) > div.form-item-body > div > div.input-editor",
@@ -41,7 +42,7 @@
// publish later radiobox
WebviewUtils.simpleElementClick(
webView,
- "#container-wrap > div.container-center > div > div > div.main-body-wrap.post-create > div.main-body > div > div.post-edit-wrap.material-edit-wrap > div.form > div.post-time-wrap > div:nth-child(1) > div.form-item-body > div > label:nth-child(2)"
+ "#container-wrap > div.container-center > div > div > div.main-body-wrap.post-create > div.main-body > div > div.post-edit-wrap.material-edit-wrap > div.form > div.post-time-wrap > div > div.form-item-body > div > label:nth-child(2)"
)
addValueToDatePickerInput(true,"#container-wrap > div.container-center > div > div > div.main-body-wrap.post-create > div.main-body > div > div.post-edit-wrap.material-edit-wrap > div.form > div.post-time-wrap > div:nth-child(2) > div.form-item-body > dl > dd",videoInfo.datetime)
@@ -106,6 +107,7 @@
private fun addValueToDatePickerInput(first:Boolean, jsPath: String, targetValue: String) {
+ println(targetValue+"杩欐槸鏃堕棿///////////")
var datetimes = Utils.validateAndReturnDateTime(targetValue) ?: return
diff --git a/app/ttt.json b/app/ttt.json
new file mode 100644
index 0000000..17462f4
--- /dev/null
+++ b/app/ttt.json
@@ -0,0 +1,23 @@
+xsecappid=ugc;
+a1=1939a580098qal8prsprpx71cj9rygo65cs0ame6n30000165115;
+webId=3fe950abc269d8ccc08d8ab1a513b51e;
+gid=yjqj02Yyqf2Kyjqj02Y88S6djYA01YUFMUFUMKICWySVj8q8FvklK0888yK2yy288YqdW84f;
+customer-sso-sid=68c517445160666216132753128a94cf26ffda46;
+x-user-id-creator.xiaohongshu.com=66f9208b000000001d0307a5;
+customerClientId=496382327268371;
+access-token-creator.xiaohongshu.com=customer.creator.AT-68c517446276627574625368zz58vqokvj20qob0;
+galaxy_creator_session_id=NrzaB1vOCZl5RrtKdOBmW7Glu0Z9uQAz6uWh;
+galaxy.creator.beaker.session.id=1733721380817008025744;
+acw_tc=0a4a9a7a17337344438126430e8b239cf9bb9e8ccd29cd7c5128375c1e1baa;
+websectiga=29098a4cf41f76ee3f8db19051aaa60c0fc7c5e305572fec762da32d457d76ae;
+sec_poison_id=fc7e7662-9729-4ea2-80fe-0d9f21445919
+
+
+
+
+
+xsecappid=ugc;
+acw_tc=0a4a1d1e17338016839177906e1b35470f735fdbfbd6b1e5910b33b5940d03;
+websectiga=2a3d3ea002e7d92b5c9743590ebd24010cf3710ff3af8029153751e41a6af4a3;
+sec_poison_id=4a974805-0f17-4f34-aace-af303de48018;
+gid=yjq0d0J4yKF4yjq000280M1SS8fvd3hv1Fl8VCI6D343T828yhSY0h888q8qq2Y8d8y20JqS
\ No newline at end of file
diff --git a/test.txt b/test.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test.txt
--
Gitblit v1.9.1