GPTTXTWP_32bit.py kodları şöle ne gibi değişiklik yapmam gerekir
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import openai
import requests
import random
import string
import requests
import json
import os
import sys
from requests.packages import urllib3
import re
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
with open("config.json", "r", encoding="utf-8") as f:
read = json.load(f)
f.close()
openai.api_key = read['openai.api_key']
unsplash_key = read['unsplash_key']
w_base_url = read['w_base_url']
w_username = read['w_username']
w_password = read['w_password']
questionspath = "basliklar.txt"
if not os.path.exists(questionspath):
open(questionspath, 'w', encoding='utf-8-sig').close()
print("'basliklar.txt' dosyası oluşturuldu. soruları alt alta ekleyip programı yeniden başlatın.")
input("bu ekranı kapatmak için enter basınız.")
sys.exit()
OPENAI_COMPLETION_OPTIONS = {
"temperature": 0.7,
"max_tokens": 1000,
"top_p": 1,
"frequency_penalty": 0,
"presence_penalty": 0
}
def remove_invalid_characters(text):
valid_chars = "-_.() %s%s" % (string.ascii_letters, string.digits)
clean_name = ''.join(c if c in valid_chars else '_' for c in text)
clean_name = clean_name.strip() # boşlukları temizle
clean_name = clean_name.rstrip('.') # noktaları temizle
return clean_name
def get_tag_id(tag_name):
tag_url = w_base_url + '/wp-json/wp/v2/tags?search=' + tag_name
response = requests.get(tag_url, auth=(w_username, w_password),verify=False).json()
if not response:
new_tag_url = w_base_url+ '/wp-json/wp/v2/tags'
tag_data = {'name': tag_name}
response = requests.post(new_tag_url, auth=(w_username, w_password), json=tag_data,verify=False).json()
return response['id']
return response[0]['id']
def image_upload(imagepath,desc):
if "/" in imagepath:
imagename = imagepath.split("/")[-1]
else:
imagename = imagepath
image_data = {
'file': (imagename, open(imagepath, 'rb'), 'image/jpeg', {'Expires': '0'}),
'caption': desc
}
response = requests.post(w_base_url+'/wp-json/wp/v2/media', files=image_data,auth=(w_username, w_password),verify=False)
image_info = response.json()
return image_info['id'],image_info['source_url']
def post_wp(title,makaleler,ozet,etiketler,images,kategori,status='draft'):
cleaned_text = remove_invalid_characters(title)
featured_media = ""
inline_media = list()
for i , image in enumerate(images, start=1):
if i == 1:
featured_media, _blank = image_upload(image,cleaned_text)
os.remove(image)
else:
_blank, media_url = image_upload(image,cleaned_text)
inline_media.append(media_url)
os.remove(image)
icerik = ""
if len(inline_media) == 2:
media1 = '<figure class="wp-block-image size-full"><img src="'+ inline_media[0] + '" alt="'+cleaned_text+'"/></figure>'
media2 = '<figure class="wp-block-image size-full"><img src="'+ inline_media[1] + '" alt="'+cleaned_text+'"/></figure>'
icerik = makaleler[0] + media1 + makaleler[1] + media2
elif len(inline_media) == 1:
media1 = '<figure class="wp-block-image size-full"><img src="'+ inline_media[0] + '" alt="'+cleaned_text+'"/></figure>'
icerik = makaleler[0] + media1 + makaleler[1]
else:
icerik = makaleler[0] + makaleler[1]
post_data = {
'title': title,
'content': icerik,
"excerpt": ozet,
'status': status,
'tags': etiketler
}
post_data['tags'] = [get_tag_id(tag) for tag in post_data['tags']]
cat_id = get_cat_id(kategori)
if cat_id:
post_data['categories'] = [cat_id]
if featured_media:
post_data['featured_media'] = featured_media
response = requests.post(w_base_url+'/wp-json/wp/v2/posts', auth=(w_username, w_password), json=post_data,verify=False)
if response.status_code == 201:
print('Yeni yazı başarıyla gönderildi!')
else:
print('Bir hata oluştu:', response.json())
def get_cat_names():
cat_url = w_base_url+'/wp-json/wp/v2/categories'
response = requests.get(cat_url, auth=(w_username, w_password),verify=False).json()
katlist = list()
for category in response:
katlist.append(category["name"])
return katlist
def get_cat_id(category_name):
cat_url = w_base_url+'/wp-json/wp/v2/categories?search=' + category_name
response = requests.get(cat_url, auth=(w_username, w_password),verify=False).json()
if response:
return response[0]['id']
else:
return
def random_filename():
letters = string.ascii_lowercase
return ''.join(random.choice(letters) for i in range(10))
def unsplash_search(kelimeler):
photos = list()
for kelime in kelimeler.split(","):
response = requests.get(
"https://api.unsplash.com/search/photos?query="+kelime+"&per_page=50",
headers={"Authorization": "Client-ID "+unsplash_key})
photo_data = response.json()
finame = random_filename()
photo_results = photo_data['results']
random.shuffle(photo_results)
for i , photo in enumerate(photo_results, start=1):
if i < 4:
photo_url = photo['urls']['regular']
response = requests.get(photo_url)
fname = finame+"_"+str(i)+".jpg"
with open(fname, 'wb') as f:
f.write(response.content)
photos.append(fname)
else:
break
if photos:
break
return photos
def ask_question(messages):
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=messages,
**OPENAI_COMPLETION_OPTIONS
)
response_text = response.choices[0].message.content
return response_text
def askme_stored(ask,messages):
#print("")
#print("soru:", ask)
#print("")
if not messages:
prompt = """As an advanced chatbot named ChatGPT, your primary goal is to assist users to the best of your ability. This may involve answering questions, providing helpful information, or completing tasks based on user input. In order to effectively assist users, it is important to be detailed and thorough in your responses. Use examples and evidence to support your points and justify your recommendations or solutions. Remember to always prioritize the needs and satisfaction of the user. Your ultimate goal is to provide a helpful and enjoyable experience for the user. You must use h1,h2 tags for write article. subheadings (including H1, H2, H3, and H4 html tag headings)"""
messages.append({"role": "system", "content": prompt})
messages.append({"role": "user", "content": ask})
while True:
try:
answer = ask_question(messages)
break
except:
pass
messages = messages[2:]
print("")
print("Cevap:", answer)
print("")
messages.append({"role": "assistant", "content": answer})
return answer, messages
def find_between(s, start, end):
return (s.split(start))[1].split(end)[0]
def tag_parte(content):
content = content.replace("\n"," ")
tags = find_between(content,"<etiketler>","</etiketler>").strip()
unsplash = find_between(content,"<unsplash>","</unsplash>").strip().replace("_"," ").replace("-"," ")
return tags,unsplash
def cat_parte(content):
content = content.replace("\n"," ")
cat = find_between(content,"<kategori>","</kategori>").strip()
return cat
def titles_parte(content):
results = re.findall(r'\d+\.\s+\"(.*)\"', content)
if results:
return results[:-1]
else:
return re.findall(r'\d+\.\s+(.*)', content)[:-1]
def removeques(ques):
try:
with open(questionspath, "r", encoding='utf-8-sig') as f:
lines = f.read().splitlines()
try:
lines.remove(ques)
except:
pass
with open(questionspath, "w", encoding='utf-8-sig') as f:
f.writelines(["%s\n" % item for item in lines])
except:
pass
def main():
kategoriler = get_cat_names()
quess = open(questionspath, encoding='utf-8-sig').readlines()
for i, baslik in enumerate(quess, start=1):
if baslik.strip():
messages = list()
print(baslik,"makale hazırlanıyor...")
while True:
soru = "subheadings (including H1, H2, H3, and H4 html tag headings), 1000 kelimelik makale html formatında yaz, Makaleyi 2 parçaya böl, her cevapta bir parçayı vereceksin. Şimdi ilk parçayı yaz. Konu: '"+baslik+"'"
makale1, messages = askme_stored(soru,messages)
if "</h1>" in makale1:
break
else:
messages = list()
print("Seo uyumlu veri gelmediği için tekrar deneniyor...")
print(baslik,"makale devam ettirirliyor...")
soru = "Şimdi ikinci kısmı yaz."
makale2, messages = askme_stored(soru,messages)
print(baslik,"makale için meta hazırlanıyor...")
soru = "Bu makale için bir meta açıklaması yaz."
meta, messages = askme_stored(soru,messages)
print(baslik,"makale için etiketler hazırlanıyor...")
while True:
soru = "'"+baslik+"' Bu makale için bana etiketler önerip, etiketleri <etiketler>etiket 1,etiket 2,etiket 3</etiketler> bu şekilde yazar mısın? ayrıca unsplash'da resim araması yapmak için makale ile alakalı genel iki tane etiketi mutlaka ingilizce olarak verirmisin, onu da <unsplash>genel etiket 1, genel etiket 2<unsplash> bu şekilde yazar mısın?"
etiketinfos, messages = askme_stored(soru,messages)
tags,unsplash = tag_parte(etiketinfos)
if unsplash:
break
print(baslik,"makale için kategori seçimi yaptırılıyor...")
soru = "Bu makale için en uygun kategori '"+ ','.join(kategoriler)+ "' bunlardan hangisidir. <kategori>seçilen kategori<kategori> bu şekilde yazar mısın?"
kategori_source, messages = askme_stored(soru,messages)
kategori = cat_parte(kategori_source)
print(baslik,"için resimler bulunuyor")
images = unsplash_search(unsplash)
title = baslik
makaleler = [makale1,makale2]
ozet = meta
etiketler = tags.split(',')
print("konu Hazırlanıyor.")
post_wp(title,makaleler,ozet,etiketler,images,kategori,status='publish') # taslak için status='draft', yayınlama için status='publish'
removeques(baslik)
input("Uygun makaleler yayınlandı.")
if __name__ == "__main__":
main()