Channel Listing Auto Blog Write - App script 1 - Selected ✅

// ========================================== // CHANNEL DEALS - GAS MASTER SCRIPT (PREMIUM AUTO-BLOG v12.0 FINAL) // ========================================== const SHEET_ID = '1zLtoIoTeWDYUY8RXSCESpPuSYf6jNkpGw_HRAKOMzJo'; const ADMIN_WHATSAPP = "917987744656"; // 🔴 API KEYS 🔴 const GROQ_API_KEY = "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"; const BLOG_ID = "8618582521881069823"; // ========================================== // 1. DATA DIKHANE KE LIYE (GET REQUEST) // ========================================== function doGet(e) { try { const ss = SpreadsheetApp.openById(SHEET_ID); const action = (e.parameter && e.parameter.action) ? e.parameter.action : "getChannels"; if (action === "getPartnerStats") { const partnerId = e.parameter.partnerId; const partnerSheet = ss.getSheetByName("Partners_DB"); const pData = partnerSheet.getDataRange().getValues(); for (let i = 1; i < pData.length; i++) { if (pData[i][1].toString().trim() === partnerId) { return jsonResponse({ name: pData[i][2], totalLeads: pData[i][5], successDeals: pData[i][6], wallet: pData[i][7], paymentStatus: pData[i][9] }); } } return jsonResponse({ error: "Partner ID not found" }); } const sheet = ss.getSheetByName("New Channels"); const data = sheet.getDataRange().getValues(); let jsonData = []; for (let i = 1; i < data.length; i++) { let row = data[i]; let status = row[3] ? row[3].toString().trim().toUpperCase() : ""; if (status === "APPROVED" || status === "SOLD OUT") { jsonData.push({ adminWhatsapp: ADMIN_WHATSAPP, topGeo: row[2] || "", status: status === "SOLD OUT" ? "Sold Out" : "Approved", channelId: row[4] || "", channelName: row[5] || "", subscribers: row[6] || "", views: row[7] || "", monetized: row[8] ? row[8].toString().trim().toLowerCase() : "no", lifetimeEarning: row[9] || "", watchTime: row[10] || "", strikeInfo: row[11] || "", category: row[12] || "", videoType: row[13] || "", detailLink: row[18] || "#" }); } } return jsonResponse(jsonData); } catch (error) { return jsonResponse({ "error": error.message }); } } // ========================================== // 2. DATA SAVE KARNE KE LIYE (POST REQUEST) // ========================================== function doPost(e) { try { const ss = SpreadsheetApp.openById(SHEET_ID); let formData = JSON.parse(e.postData.contents || "{}"); const action = formData.action; const timestamp = new Date(); if (action === "sellChannel") { const dbSheet = ss.getSheetByName("New Channels"); const lastRow = dbSheet.getLastRow(); const newRow = lastRow + 1; const channelId = "CD" + (1000 + newRow); const promptFormula = '="इस यूट्यूब चैनल की सिर्फ 3-4 लाइन की एक दमदार और आकर्षक AI Description लिखो। यह चैनल सेल के लिए है। सिर्फ फायदे बताओ ताकि कस्टमर तुरंत खरीद ले। चैनल का नाम: " & F' + newRow + ' & ", सब्सक्राइबर्स: " & G' + newRow + ' & ", कमाई: " & J' + newRow + ' & "। कोई HTML मत देना, सिर्फ सीधा टेक्स्ट लिखना।"'; const msgFormula = '="🔔 YouTube Channel for Sale ! 🔔" & CHAR(10) & "-----" & CHAR(10) & "👉 Channel ID: " & E' + newRow + ' & CHAR(10) & "👉 Current Status: AVAILABLE🟢" & CHAR(10) & "👉 Total Subscribers: " & G' + newRow + ' & CHAR(10) & "👉 Life Time Views: " & H' + newRow + ' & CHAR(10) & "👉 Monetize Status: " & I' + newRow + ' & CHAR(10) & "👉 Video type: " & N' + newRow + ' & CHAR(10) & "👉 Restrictions/Strikes: " & L' + newRow + ' & CHAR(10) & "👉 Lifetime Earnings: " & J' + newRow + ' & CHAR(10) & "👉 View More (Dashboard SS etc.): " & IF(S' + newRow + '="", "Link Processing...", S' + newRow + ') & CHAR(10) & CHAR(10) & "📌 Interested?, To buy this channel, Send us a message on What\'s App or Arratai: 7987744656 with Screenshot or Channel ID Number: " & E' + newRow; dbSheet.appendRow([ timestamp, trimData(formData.sellerWhatsapp), trimData(formData.topGeo), "Pending", channelId, trimData(formData.channelName), trimData(formData.subscribers), trimData(formData.views), trimData(formData.monetized || "no"), trimData(formData.earning || "0"), trimData(formData.watchTime || "0"), trimData(formData.strikeInfo || "No Strike"), trimData(formData.category), trimData(formData.videoType || ""), trimData(formData.dashboardImageUrl), trimData(formData.analyticsImageUrl), trimData(formData.monetizeImageUrl), trimData(formData.channelLink), "", trimData(formData.partnerId || ""), promptFormula, "", msgFormula ]); return jsonResponse({ status: "success", message: "Channel listed!" }); } if (action === "registerPartner") { const waNum = trimData(formData.whatsapp).replace(/\D/g, ''); const partnerId = "pts-" + waNum.slice(-5); ss.getSheetByName("Partners_DB").appendRow([timestamp, partnerId, trimData(formData.name), waNum, trimData(formData.upi), 0, 0, 0, 0, "Active"]); return jsonResponse({ status: "success", partnerId: partnerId }); } if (action === "submitLead") { const pId = trimData(formData.partnerId); ss.getSheetByName("Leads_DB").appendRow([timestamp, pId, trimData(formData.leadType), trimData(formData.customerWhatsapp), trimData(formData.requirement), trimData(formData.budget), "Pending", ""]); updatePartnerLeadCount(ss, pId); return jsonResponse({ status: "success" }); } return jsonResponse({ status: "error", message: "Invalid action." }); } catch (error) { return jsonResponse({ status: "error", message: error.message }); } } // ========================================== // 3. MAGIC AUTOMATION (ON EDIT TRIGGER) - 🌟 GROQ + BLOGGER PREMIUM DESIGN // ========================================== function createAutoBlog(e) { if (!e || !e.range) return; const sheet = e.range.getSheet(); const sheetName = sheet.getName(); const row = e.range.getRow(); const col = e.range.getColumn(); const value = e.value; if (row < 2) return; if (sheetName === "New Channels" && col === 4) { if (value && value.toString().trim().toUpperCase() === "APPROVED") { const blogLinkCheck = sheet.getRange(row, 19).getValue(); if (!blogLinkCheck) { const rowData = sheet.getRange(row, 1, 1, 25).getValues()[0]; const geminiPrompt = rowData[20]; const channelId = rowData[4]; const channelName = rowData[5]; const category = rowData[12]; try { // AI से Description लिखवाया और लाइन ब्रेक
फिक्स किया const rawText = callGroq(geminiPrompt); const aiDescription = rawText.replace(/```html/g, "").replace(/```/g, "").trim().replace(/\n/g, "
"); sheet.getRange(row, 22).setValue(aiDescription); const postTitle = `🔥 YouTube Channel For Sale | ${channelName} | ID: ${channelId}`; const postUrl = publishToBlogger(postTitle, aiDescription, category, rowData); if (postUrl) { sheet.getRange(row, 19).setValue(postUrl); // Column S में लिंक सेव होगी sheet.getRange(row, 21).clearContent(); // Column U का फॉर्मूला तुरंत डिलीट करेगा sheet.getRange(row, 22).clearContent(); // Column V का AI टेक्स्ट तुरंत डिलीट करेगा } } catch (error) { sheet.getRange(row, 19).setValue("Error: " + error.message); } } } } if (sheetName === "Partners_DB" && col === 10) { if (value && value.toString().trim().toLowerCase() === "settled") { const walletRange = sheet.getRange(row, 8), paidRange = sheet.getRange(row, 9); const curWallet = parseFloat(walletRange.getValue()) || 0, curPaid = parseFloat(paidRange.getValue()) || 0; if (curWallet > 0) { paidRange.setValue(curPaid + curWallet); walletRange.setValue(0); } } } if (sheetName === "Leads_DB" && (col === 7 || col === 8)) { const statusValue = sheet.getRange(row, 7).getValue().toString().trim().toLowerCase(); const commission = parseFloat(sheet.getRange(row, 8).getValue()) || 0; if (statusValue === "done" && commission > 0) { const pId = sheet.getRange(row, 2).getValue().toString().trim(); if (pId) { const pSheet = e.source.getSheetByName("Partners_DB"); const pData = pSheet.getDataRange().getValues(); for (let i = 1; i < pData.length; i++) { if (pData[i][1].toString().trim() === pId) { pSheet.getRange(i + 1, 7).setValue((parseInt(pData[i][6]) || 0) + 1); pSheet.getRange(i + 1, 8).setValue((parseFloat(pData[i][7]) || 0) + commission); pSheet.getRange(i + 1, 10).setValue("Pending"); sheet.getRange(row, 7).setValue("Done ✅"); break; } } } } } } // ========================================== // API HELPER FUNCTIONS // ========================================== function callGroq(promptText) { const url = "https://api.groq.com/openai/v1/chat/completions"; const payload = { "model": "llama-3.3-70b-versatile", "messages": [{ "role": "user", "content": promptText }], "temperature": 0.7 }; const options = { "method": "post", "contentType": "application/json", "headers": { "Authorization": "Bearer " + GROQ_API_KEY }, "payload": JSON.stringify(payload), "muteHttpExceptions": true }; const response = UrlFetchApp.fetch(url, options); const json = JSON.parse(response.getContentText()); if (json.choices && json.choices.length > 0) { return json.choices[0].message.content; } else { throw new Error("Groq API Error: " + response.getContentText()); } } // 🌟 PREMIUM APP-STYLE BLOGGER FUNCTION (EXACT 100% ORIGINAL DESIGN) 🌟 function publishToBlogger(title, aiContent, label, rowData) { const channelId = rowData[4] || "N/A"; const subs = rowData[6] || "0"; const views = rowData[7] || "0"; // 🚀 स्मार्ट Monetization कन्वर्टर (बस यही अपडेट किया है) 🚀 let rawMon = (rowData[8] || "No").toString().trim().toLowerCase(); let monStatus = "Not Monetised"; if (rawMon === "yes") monStatus = "Full Monetised"; else if (rawMon === "half") monStatus = "Half Monetised"; else if (rawMon !== "no" && rawMon !== "") monStatus = rowData[8]; const earnings = rowData[9] || "$0"; const strikes = rowData[11] || "None"; const videoType = rowData[13] || "Mixed"; const img1 = rowData[14] || ""; const img2 = rowData[15] || ""; const img3 = rowData[16] || ""; const ytLink = rowData[17] || "#"; const finalHtml = ` Buy Monetized YouTube Channel - ${subs} Subs (${channelId}) | Channel Deals
Earning Channel
ID: ${channelId}

${subs} Subs & ${monStatus} YouTube Channel For Sale!

Buy this active, earning channel (${videoType} Videos) securely with 100% Escrow Protection.

${subs}

Subscribers

${views}

Lifetime Views

${videoType}

Video Type

${monStatus}

Status

Restrictions: ${strikes}
Monetize Status: ${monStatus}
Lifetime Earnings: ${earnings}

पैसे कमाने वाला चैनल (Channel Info)

${aiContent}

100% सुरक्षित डील

हम (CHANNEL DEALS) आपको विश्वास दिलाते हैं कि हमारी डील 100% सुरक्षित होती है। चैनल आपको 8-दिन की Escrow पॉलिसी के तहत पूरी सेफ्टी के साथ ट्रांसफर किया जाएगा।

`; // 3. Blogger API Call const url = "https://www.googleapis.com/blogger/v3/blogs/" + BLOG_ID + "/posts/"; const labelsArray = label ? [label.toString().trim(), "Channel Deals", "Premium"] : ["Channel Deals", "Premium"]; const payload = { "kind": "blogger#post", "title": title, "content": finalHtml, "labels": labelsArray }; const options = { "method": "post", "contentType": "application/json", "headers": { "Authorization": "Bearer " + ScriptApp.getOAuthToken() }, "payload": JSON.stringify(payload), "muteHttpExceptions": true }; const response = UrlFetchApp.fetch(url, options); const json = JSON.parse(response.getContentText()); if (json.url) { return json.url; } else { throw new Error(json.error && json.error.message ? json.error.message : "Blogger error"); } } function trimData(val) { return val ? val.toString().trim() : ""; } function jsonResponse(data) { return ContentService.createTextOutput(JSON.stringify(data)).setMimeType(ContentService.MimeType.JSON); } function updatePartnerLeadCount(ss, pId) { const sheet = ss.getSheetByName("Partners_DB"), data = sheet.getDataRange().getValues(); for (let i = 1; i < data.length; i++) { if (data[i][1].toString().trim() === pId) { sheet.getRange(i+1, 6).setValue((parseInt(data[i][5])||0)+1); break; } } }