• 15-07-2023, 20:27:27
    #1
    elimde wordpress chatbpt bot u var post gönderirken bu hata çıkıyor ve post gönderme duruyor nasıl düzelir acaba

  • 15-07-2023, 21:15:23
    #2
    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()