您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
GitHub Star 自动记录到 Notion Database
// ==UserScript== // @name GitHub Star Network Request // @namespace https://github.com/CherryLover/GithubStarScript // @version 0.4 // @description GitHub Star 自动记录到 Notion Database // @author jiangjiwei // @supportURL https://github.com/CherryLover/GithubStarScript // @match https://github.com/*/* // @grant GM_xmlhttpRequest // @grant GM_setValue // @grant GM_getValue // @license MIT // ==/UserScript== (function () { 'use strict'; function sendNetworkRequest() { // Modify the following URL to the desired endpoint var databasePageId = GM_getValue('databasePageId', ''); // Load saved value var notionToken = GM_getValue('notionToken', ''); // Load saved value if (databasePageId.length == 0 || notionToken.length == 0) { alert('please input your token and database page id'); return; } const endpointURL = 'https://api.notion.com/v1/pages/'; var repositoryName = document.querySelector('strong[itemprop="name"]').textContent; var currentUrl = window.location.href; if (currentUrl == "https://github.com") { repositoryName = "GitHub"; } else { repositoryName = currentUrl.substring(currentUrl.lastIndexOf("/") + 1); } var body = { "parent": { "database_id": databasePageId }, "properties": { "Name": { "title": [ { "text": { "content": repositoryName } } ] }, "URL": { "url": currentUrl } } } console.log("request body " + JSON.stringify(body)) GM_xmlhttpRequest({ method: 'POST', url: endpointURL, headers: { 'Content-Type': 'application/json', Authorization: 'Bearer ' + notionToken, 'Notion-Version': '2022-02-22', }, data: JSON.stringify(body), onload: function (response) { // print response code console.log('Response code:', response.status); if (response.status == 200) { console.log('success'); } else { console.log('failed'); console.log('Network request sent successfully.' + response.responseText); } }, onerror: function (error) { console.error('Error sending network request:', error); } }); } let settingsDiv = null; // Show settings interface let isSettingsVisible = false; // Flag to track visibility // Function to toggle settings visibility function toggleSettings() { isSettingsVisible = !isSettingsVisible; if (isSettingsVisible) { showSettings(); } else { hideSettings(); } } // Show settings interface function showSettings() { settingsDiv = document.createElement('div'); settingsDiv.id = 'user-script-settings'; settingsDiv.style.position = 'fixed'; settingsDiv.style.top = '0'; settingsDiv.style.left = '0'; settingsDiv.style.padding = '10px'; settingsDiv.style.background = 'white'; settingsDiv.style.border = '1px solid #ccc'; settingsDiv.style.borderRadius = '8px'; settingsDiv.style.display = 'flex'; settingsDiv.style.flexDirection = 'column'; settingsDiv.style.alignItems = 'flex-start'; settingsDiv.style.color = '#333333'; const tokenLabel = document.createElement('label'); tokenLabel.textContent = 'Notion Token:'; const tokenInput = document.createElement('input'); tokenInput.type = 'text'; tokenInput.value = GM_getValue('notionToken', ''); // Load saved value tokenInput.style.background = 'white'; tokenInput.style.border = '1px solid #999999'; tokenInput.style.borderRadius = '8px'; tokenInput.style.padding = '5px'; tokenInput.style.color = '#333333'; tokenInput.style.width = '100%'; settingsDiv.appendChild(tokenLabel); settingsDiv.appendChild(tokenInput); const pageIdLabel = document.createElement('label'); pageIdLabel.textContent = 'Database Page Id:'; pageIdLabel.style.marginTop = '10px'; const pageIdInput = document.createElement('input'); pageIdInput.type = 'text'; pageIdInput.value = GM_getValue('databasePageId', ''); // Load saved value pageIdInput.style.background = 'white'; pageIdInput.style.border = '1px solid #999999'; pageIdInput.style.borderRadius = '8px'; pageIdInput.style.padding = '5px'; pageIdInput.style.color = '#333333'; pageIdInput.style.width = '100%'; settingsDiv.appendChild(pageIdLabel); settingsDiv.appendChild(pageIdInput); const duplicateLink = document.createElement('a'); duplicateLink.textContent = 'How to get this?'; duplicateLink.href = 'https://notion.so'; duplicateLink.style.color = 'rgb(47, 129, 247)'; duplicateLink.style.marginTop = '5px'; settingsDiv.appendChild(duplicateLink); const containerDiv = document.createElement('div'); containerDiv.style.display = 'flex'; containerDiv.style.flexDirection = 'row'; containerDiv.style.alignItems = 'center'; containerDiv.style.justifyContent = 'space-between'; // Space between elements containerDiv.style.width = '100%'; const saveButtonContainer = document.createElement('div'); saveButtonContainer.style.display = 'flex'; saveButtonContainer.style.alignItems = 'center'; // Center vertically saveButtonContainer.style.justifyContent = 'center'; // Center horizontally saveButtonContainer.style.width = '100%'; const saveButton = document.createElement('button'); saveButton.textContent = 'Save'; saveButton.addEventListener('click', function () { var tokenText = tokenInput.value; var pageIdText = pageIdInput.value; if (tokenText.length == 0 || pageIdText.length == 0) { alert('please input your token and database page id'); return; } GM_setValue('notionToken', tokenInput.value); // Save Notion Token value GM_setValue('databasePageId', pageIdInput.value); // Save Database Page Id value hideSettings(); // Hide after saving }); // Set button styles const buttonHeight = '30px'; // Set the button height const buttonWidth = '50%'; // Set the button width to 50% saveButton.style.border = 'none'; saveButton.style.borderRadius = '15px'; // Set the border radius to 50% saveButton.style.padding = '0'; saveButton.style.margin = '10px 10px 10px 10px'; saveButton.style.width = buttonWidth; saveButton.style.height = buttonHeight; saveButton.style.backgroundColor = 'rgb(47, 129, 247)'; // Button color saveButton.style.color = 'white'; // Button text color saveButton.addEventListener('mouseenter', function () { saveButton.style.backgroundColor = 'rgb(29, 101, 207)'; // Hover color }); saveButton.addEventListener('mouseleave', function () { saveButton.style.backgroundColor = 'rgb(47, 129, 247)'; // Button color }); saveButton.addEventListener('mousedown', function () { saveButton.style.backgroundColor = 'rgb(12, 84, 171)'; // Click color }); saveButton.addEventListener('mouseup', function () { saveButton.style.backgroundColor = 'rgb(29, 101, 207)'; // Hover color }); saveButtonContainer.appendChild(saveButton); containerDiv.appendChild(saveButtonContainer); settingsDiv.appendChild(containerDiv); document.body.appendChild(settingsDiv); } // Hide settings interface function hideSettings() { if (settingsDiv) { settingsDiv.remove(); } } const starButton = document.querySelector('button.js-toggler-target'); console.log('star button is null ' + (starButton == null)); if (starButton != null) { starButton.addEventListener('click', () => { // Call the function to send the network request console.log("you click star button") sendNetworkRequest(); }); } window.addEventListener('keydown', function (event) { if (event.key === 'F9') { toggleSettings(); } }); })();