[Пошаговое руководство] Поиск ключевых слов, создание и публикация 150 статей на сайте wordpress менее чем за 30 минут с помощью GPTChat и Python/Google Colab
- Чтобы начать публиковать 150 постов на вашем сайте wordpress, потребуется менее 30 минут, а чтобы разместить их все в сети - не более 1 часа.
- Метод 100% бесплатный, за исключением того, что нам нужен api ключ GPTChat. Но вы можете получить бесплатную пробную версию за 5 usd, так что это тоже может быть бесплатно.
- Мы создаем 150 ключевых слов с помощью бесплатного инструмента ahrefs - https://ahrefs.com/keyword-generator.
- Вставляем код в Google colab.
- Убедитесь, что вы не сделали свою Google colab публичной для безопасности. По умолчанию она должна быть приватной, но лучше проверять это постоянно.
- Этот код отвечает за создание постов через GPTChat API и публикацию на вашем сайте wordpress.
- Мы создаем учетные данные для сайта wordpress, чтобы иметь возможность публиковать там посты.
- Мы определяем, сколько постов мы хотим, а затем нажимаем кнопку
(Посты публикуются автоматически после нажатия кнопки.)
Пожалуйста, обратите внимание, что это мой первый учебник, так что если я нарушил какие-либо правила, дайте мне знать, и я это исправлю. У меня есть файл google colab с кодом, но я не уверен, как его загрузить.
Начнем...
1) Зайдите на сайт https://ahrefs.com/keyword-generator и добавьте любое ключевое слово. Выделите ключевые слова и вопросы вот так и вставьте их в txt-файл.
Файл с ключевыми словами будет выглядеть вот так, он грязноват, но мы автоматически отформатируем его с помощью python.
02) Теперь нам нужно создать собственную Google Colab (которая также является 100% бесплатной для использования)
перейдите на https://colab.google/ и нажмите на "Новый блокнот".
Вот как это выглядит, нам нужно добавить несколько строк кода, создать файл, и мы готовы к работе
Добавьте этот код в первую строку, чтобы установить openai:
!pip install openai --quiet
Этот код нужно добавить во вторую строку, он форматирует ключевые слова и содержит все функции:
import openai import os openai.api_key = "your_open_ai_api_key" def make_post(the_title,the_text,your_user,your_password,your_site,wordpress_category): import requests import base64 your_credentials = your_user + ":" + your_password your_token = base64.b64encode(your_credentials.encode()) your_header = {'Authorization': 'Basic ' + your_token.decode('utf-8')} api_url = your_site+'/wp-json/wp/v2/posts' if not wordpress_category == "": data = { 'title' : the_title, 'status': 'publish', 'content': the_text, 'categories': 3 ##'slug' : 'example-post', } else: data = { 'title' : the_title, 'status': 'publish', 'content': the_text, } response = requests.post(api_url,headers=your_header, json=data) return response.json() def gpt_chat(all_params): the_keyword,the_prefix,the_temperature,the_max_tokens = all_params the_text = the_prefix + the_keyword + ":" #the_text = the_prefix + the_text response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": the_text}], temperature=the_temperature, max_tokens=the_max_tokens ) the_result = response["choices"][0]["message"]["content"] return the_result def fix_ahrefs_keywords(file_with_keywords): #remove empty lines and non keyword lines from output of https://ahrefs.com/keyword-generator with open(file_with_keywords, 'r') as fyl: lines = fyl.readlines() good_lines = [] for aline in lines: aline = aline.strip() if (not any(str.isdigit(x) for x in aline) or len(aline.split())>3) and not aline.strip()=="" and not "Sign up" in aline and not "N/A" in aline: good_lines.append(aline) with open(file_with_keywords, 'w') as f: for line in good_lines: f.write(f"{line}\n") #load file with your keywords file_with_keywords = "sample_data/keywords.txt" #this step fixes the file with keywords from https://ahrefs.com/keyword-generator fix_ahrefs_keywords(file_with_keywords)
Добавьте этот код в третью строку:
# SETTINGS begin_index = 11 end_index = 12 your_site = "yur site url" your_user = "your site username" your_password = "your site application password" wordpress_category = "" # or you can add here a category id title_is_keyword = "yes" #cam be "yes" or "no". If yes then the title is the keyword, if no then the title is created by GPTCHAT remove_ai_detection = "no" #prefix = "Write an article about" prefix = "Write a very extremelly long and detailed article about " #load the fixed keywords with open(file_with_keywords, 'r') as fyl: keywords = fyl.readlines() keywords = [x.strip() for x in keywords] #now we create posts using GPT-chat and post them to our wordpress site for e,akeyword in enumerate(keywords): if e<begin_index or e>=end_index:continue #this makes sure we only add article from begin to end the_temperature = 0.7 the_max_tokens = 2000 all_params = akeyword,prefix,the_temperature,the_max_tokens print("we are writing post #",e,", using keyword:",akeyword) gptchat_article = gpt_chat(all_params) title = akeyword.title() try: gptchat_article_list = gptchat_article.split("\n") if gptchat_article_list[0].count(".")<=1 and gptchat_article_list[1].strip()=="": title = gptchat_article_list[0] gptchat_article = gptchat_article.replace(title,"").strip() if title_is_keyword=="yes": title = akeyword.title() except:pass #now we post to out wordpres site try: the_response = make_post(title,gptchat_article,your_user,your_password,your_site,wordpress_category) the_link = the_response['guid']['rendered'] print("the_link",the_link,"word count",len(gptchat_article.split()),"the_title:",title) except Exception as err: print("we have an error",err)
Это должно выглядеть следующим образом:
03) Следующим шагом будет создание файла с ключевым словом и вставка в него уже имеющихся ключевых слов. Нажимаем на папку слева и создаем файл в папке sample_data под названием keywords. Затем нажимаем на keywords и добавляем туда ключевые слова.
05) Итак, с ключевыми словами покончено, осталось добавить учетные данные WordPress, и все готово.
Переходим в раздел Пользователи/профиль на панели управления WordPress и создаем Новое имя пароля приложения. Это просто имя пароля, больше мы его нигде не используем. После того как мы его добавили, нажимаем на Add New Application Password. Это тот пароль, который нам нужно скопировать и добавить в Google Colab.
06) Затем мы добавляем наши настройки, которые мы только что создали:
Чтобы контролировать количество публикуемых сообщений, измените begin_index и end_index. Например, если begin_index=0 и end_index=1, то будут опубликованы только первые посты. Чтобы опубликовать сообщение на сайте, вам нужно нажать на кнопку run в каждой ячейке. Здесь 3 ячейки, поэтому нужно нажимать каждый раз.
Теперь добавим функцию отправки изображений.
Она использует API openai как wee (dalle api), так что вы должны проверить, сколько это стоит, но я думаю, что это довольно дешево.
Вот основные настройки, вы можете выбрать, хотите ли вы добавлять изображения, а также, хотите ли вы сделать их функциями изображения, или просто поместить их в конце поста. Качество изображений Dalle довольно хорошее, но иногда нужно поиграть с подсказками, чтобы создать именно то изображение, которое вы хотите.
create_and_add_an_image = "yes" #can be yes or no make_the_image_featured = "yes" #can be yes or no image_prefix = "A detailed high quality natural image about: " image_resolution="512x512"
Если вы выберете create_and_add_an_image и make_the_image_featured, он опубликует изображение как featured и добавит его в пост в левом верхнем углу. Вы также можете изменить HTML в коде в соответствии с вашими потребностями.
Вот полный код, который состоит из 2 частей, как и раньше:
import openai import os openai.api_key = "your_open_ai_api_key" def upload_image(filename,your_site,your_user,your_password): import requests, json api_url_image = your_site+'/wp-json/wp/v2/media' the_pic = open(filename, 'rb').read() fnm = os.path.basename(filename) result = requests.post( url=api_url_image, data=the_pic, headers={ 'Content-Type': 'image/jpg','Content-Disposition' : 'attachment; filename=%s'% fnm}, auth=(your_user, your_password) ) response =result.json() the_image_id = response.get('id') the_image_url = response.get('guid').get("rendered") return (the_image_id, the_image_url) def make_post(the_title,the_text,your_user,your_password,your_site,wordpress_category,the_image_id): import requests import base64 your_credentials = your_user + ":" + your_password your_token = base64.b64encode(your_credentials.encode()) your_header = {'Authorization': 'Basic ' + your_token.decode('utf-8')} api_url = your_site+'/wp-json/wp/v2/posts' if the_image_id>0: if not wordpress_category == "": data = { 'title' : the_title, 'status': 'publish', 'content': the_text, 'categories': 3, 'featured_media': the_image_id ##'slug' : 'example-post', } else: data = { 'title' : the_title, 'status': 'publish', 'content': the_text, 'featured_media': the_image_id ##'slug' : 'example-post', } else: if not wordpress_category == "": data = { 'title' : the_title, 'status': 'publish', 'content': the_text, 'categories': 3, } else: data = { 'title' : the_title, 'status': 'publish', 'content': the_text, } response = requests.post(api_url,headers=your_header, json=data) return response.json() def gpt_chat(all_params): the_keyword,the_prefix,the_temperature,the_max_tokens = all_params the_text = the_prefix + the_keyword + ":" #the_text = the_prefix + the_text response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": the_text}], temperature=the_temperature, max_tokens=the_max_tokens ) the_result = response["choices"][0]["message"]["content"] return the_result def fix_ahrefs_keywords(file_with_keywords): #remove empty lines and non keyword lines from output of https://ahrefs.com/keyword-generator with open(file_with_keywords, 'r') as fyl: lines = fyl.readlines() good_lines = [] for aline in lines: aline = aline.strip() if (not any(str.isdigit(x) for x in aline) or len(aline.split())>3) and not aline.strip()=="" and not "Sign up" in aline and not "N/A" in aline: good_lines.append(aline) with open(file_with_keywords, 'w') as f: for line in good_lines: f.write(f"{line}\n") #load file with your keywords file_with_keywords = "sample_data/keywords.txt" #this step fixes the file with keywords from https://ahrefs.com/keyword-generator fix_ahrefs_keywords(file_with_keywords)
# SETTINGS begin_index = 11 end_index = 12 your_site = "yur site url" your_user = "your site username" your_password = "your site application password" wordpress_category = "" # or you can add here a category id title_is_keyword = "yes" #cam be "yes" or "no". If yes then the title is the keyword, if no then the title is created by GPTCHAT remove_ai_detection = "no" create_and_add_an_image = "yes" #can be yes or no make_the_image_featured = "yes" #can be yes or no image_prefix = "A detailed high quality natural image about: " image_resolution="512x512" #prefix = "Write an article about" prefix = "Write a very extremelly long and detailed article about " #load the fixed keywords with open(file_with_keywords, 'r') as fyl: keywords = fyl.readlines() keywords = [x.strip() for x in keywords] #now we create posts using GPT-chat and post them to our wordpress site for e,akeyword in enumerate(keywords): if e<begin_index or e>=end_index:continue #this makes sure we only add article from begin to end the_temperature = 0.7 the_max_tokens = 2000 all_params = akeyword,prefix,the_temperature,the_max_tokens print("we are writing post #",e,", using keyword:",akeyword) gptchat_article = gpt_chat(all_params) title = akeyword.title() the_image_url = "" the_image_id = -1 if create_and_add_an_image == "yes": response = openai.Image.create( prompt= image_prefix + akeyword, n=1, size=image_resolution ) image_url = response['data'][0]['url'] image_file = "sample_data/" + str(e)+'.jpeg' import urllib.request #download the image to file image_file urllib.request.urlretrieve(image_url, image_file) if not make_the_image_featured=="yes":the_image_id = -1 try: the_image_id,the_image_url = upload_image(image_file,your_site,your_user,your_password) print("image_url",the_image_url) except Exception as error: print("we could not upload image",error) try: gptchat_article_list = gptchat_article.split("\n") if gptchat_article_list[0].count(".")<=1 and gptchat_article_list[1].strip()=="": title = gptchat_article_list[0] gptchat_article = gptchat_article.replace(title,"").strip() if title_is_keyword=="yes": title = akeyword.title() except:pass if not the_image_url.strip()=="": if make_the_image_featured=="yes": image_insert_html_code = '<img src="'+the_image_url +'" alt="'+akeyword+'" style="float: left; margin-right: 10px;">' gptchat_article = image_insert_html_code + gptchat_article else: image_insert_html_code = '<img src="'+the_image_url +'" alt="'+akeyword+'" style="margin:10px;">' gptchat_article = gptchat_article + image_insert_html_code #now we post to out wordpres site try: the_response = make_post(title,gptchat_article,your_user,your_password,your_site,wordpress_category ,the_image_id ) the_link = the_response['guid']['rendered'] print("the_link",the_link,"word count",len(gptchat_article.split()),"the_title:",title) except Exception as err: print("we have an error",err)