Javscript

TBS Horoscope’u (Yine) Pipedream Twitter Botu Olarak Yeniden İnşa Etme

Bir problemim var. Dürüst olmak gerekirse, yaparım. Aptal Twitter botları oluşturmaya devam ediyorum. Ama – dürüstçe söyleyebilirim ki bu sefer – birçok kez olduğu gibi – havalı bir şey yaptım ve bir şeyler öğrendim ve bu da onu değerli kılıyor, değil mi? Peki bu sefer ne yaptım?

Yıllar önce, neredeyse on bir aslında, bir TBS Burç başvuru. Bu uygulama tamamen sahte ve saçma burçlar yarattı (TBS, toplam boğa güreşi anlamına gelir) ve Flex Mobile’ı kullandı. Bunu hatırla? Daha da iyisi – için inşa edildi NookRenk.

İnşa etmesi oldukça eğlenceli bir platform olduğu için Flex Mobile’ı özlüyorum. Yine de geride kalmamak için – birkaç yıl sonra onu yeniden inşa ettim. Alexa yeteneği. Bunu kullanarak inşa ettim OpenWhisk O zamanlar sunucusuz platformları kullanmak en kolay olanlardan biriydi.

Görünüşe göre, bir ara onu da yükledim. Amazon uygulama mağazası 99 sent için. Yakın zamanda emekli olacağımı sanmıyorum.

Bu sabah onu bir Twitter botu olarak ne kadar çabuk çalıştırabileceğimi görmeye karar verdim. Bu, özel bir sebep olmadan ve kesinlikle belli bir milyarderin, sahip olduğu sahte hesapların sayısı nedeniyle bir sosyal ağ satın alma konusunda tereddüt ettiğine dair söylentiler nedeniyle yapılmadı. Açık sözlü. Bu yüz sana yalan söyler mi?

Masum kedi masumdur.

Burada birkaç kez gösterdiğim gibi, Pipedream’de bir Twitter botu oluşturma süreci birkaç basit adımdan oluşur:

  • Hangi hesabın tweetleyeceğini belirleyin. Normalde bu yeni bir hesaptır, bu yüzden kendinize yeni bir hesap açın. Twitter, hesaplar için e-posta adresleri gerektirir ve ben genellikle Gmail’deki “artı” adresleme hilesini kullanırım.
  • Twitter’da programa dayalı bir iş akışı oluşturun (bir botun bir programa göre tweet atmasını istediğinizi varsayarsak, anahtar kelimeleri arayan veya başka koşullarda etkinleştiren botlar oluşturabilirsiniz).
  • Ne tweet atacağını bul
  • Tweet’i gönderin (bu, Pipedream tarafından yapılır – hiç kodlamanıza gerek yoktur)

Yukarıda, kelimenin tam anlamıyla, yazdığınız tek kod, son adımdan o saniyedir. Bu yüzden benim için bu, rastgele, anlamsız burçlar (tamamen mantıklı olan gerçek burçların aksine) oluşturmak için daha önce yazdığım kodu alıp çıktısını almayı içeriyordu. İşte bu kod nasıl görünüyordu.

import { generateSlug } from 'random-word-slugs'

const signs = ["Aries","Taurus","Gemini","Cancer","Leo","Virgo","Libra","Scorpio","Sagittarius","Capricorn","Aquarius","Pisces"];

function getAdjective() {
  return generateSlug(1, {
    partsOfSpeech:['adjective']
  });
}

function getNoun() {
  return generateSlug(1, {
    partsOfSpeech:['noun']
  });
}

function getSign() {
    return signs[randRange(0,signs.length-1)];
}

function getFinancialString() {
    let options = [
        "Today is a good day to invest. Stock prices will change. ",
        "Today is a bad day to invest. Stock prices will change. ",
        "Investments are a good idea today. Spend wisely before the " + getAdjective() + " " + getNoun() + " turns your luck! ",
        "Save your pennies! Your " + getNoun() + " is not a safe investment today. ",
        "Consider selling your " + getNoun() + " for a good return today. ",
        "You can buy a lottery ticket or a " + getNoun() + ". Either is a good investment. "
    ];
    return options[randRange(1,options.length-1)];
}

function getRomanticString() {
    let options = [
        "Follow your heart like you would follow a "+getAdjective() + " " + getNoun() + ". It won't lead you astray. ",
        "You will fall in love with a " + getSign() + " but they are in love with their " + getNoun() + ". ",
        "Romance is not in your future today. Avoid it like a " + getAdjective() + " " + getNoun() + ". ",
        "Romance is blossoming like a " + getAdjective() + " " + getNoun() + "! ",
        "Avoid romantic engagements today. Wait for a sign - it will resemble a " +getAdjective() + " " + getNoun() + ". ",
        "Love is in the air. Unfortunately not the air you will be breathing. "
    ];
    return options[randRange(1,options.length-1)];
}

function getRandomString() {
    var options = [
        "Avoid talking to a " + getSign() + " today. They will vex you and bring you a " + getNoun() + ". ",
        "Spend time talking to a " + getSign() + " today. They think you are a " + getNoun() + "! ",
        "Dont listen to people who give you vague advice about life or your " + getNoun() + ". ",
        "Today you need to practice your patience. And your piano. ",
        "Meet new people today. Show them your " + getNoun() + ". ",
        "Your spirits are high today - but watch our for a " + getAdjective() + " " + getNoun() + ". ",
        "Your sign is in the third phase today. This is important. ",
        "Your sign is in the second phase today. This is critical. ",
        "Something big is going to happen today. Or tomorrow. ",
        "Something something you're special and important something something. " ,
        "A " + getAdjective() + " " + getNoun() + " will give you important advice today. ",
        "A " + getAdjective() + " " + getNoun() + " has it out for you today. ",
        "Last Tuesday was a good day. Today - not so much. ",
        "On the next full moon, it will be full. ",
        "Today is a bad day for work - instead focus on your " + getNoun() + ". ",
        "Today is a good day for work - but don't forget your " + getNoun() + ". ",
        "A dark stranger will enter your life. They will have a " + getAdjective() + " " + getNoun() + ". "
    ];
    return options[randRange(1,options.length-1)];
}

function randRange(minNum, maxNum) {
    return (Math.floor(Math.random() * (maxNum - minNum + 1)) + minNum);
}

function getHoroscope() {
  let horoscope = `${getSign()}: 
${getRandomString()}${getFinancialString()}${getRomanticString()}

Your lucky numbers are ${randRange(1,10)}, ${randRange(1,10)} and ${getNoun()}.`;
  return horoscope;
}

İşte birkaç örnek:

İkizler burcu:
Karanlık bir yabancı hayatınıza girecek. Yenilmiş bir adaya sahip olacaklar. Bir piyango bileti veya bir restoran satın alabilirsiniz. Her ikisi de iyi bir yatırımdır. Romantizm yapışkan bir kitap gibi çiçek açıyor!

Şanslı sayıların 3, 9 ve yürümeye başlayan çocuk.

Ve daha sonra…

Kova:
Burcunuz bugün ikinci evrede. Bu kritik. Bugün iyi bir getiri için baytınızı satmayı düşünün. Bugün romantik ilişkilerden kaçının. Bir işaret bekleyin – muhteşem bir analiste benzeyecek.

Şanslı sayıların 5, 4 ve büyükanne.

Ve sonunda…

Koç burcu:
Melodik bir çocuk bugün size önemli tavsiyeler verecek. Bir piyango bileti veya bir Danimarka satın alabilirsiniz. Her ikisi de iyi bir yatırımdır. Yay burcuna aşık olacaksınız ama onlar kaşıklarına aşıklar.

Şanslı sayıların 3, 6 ve böcek.

Tamam, yukarıdaki kod bir tweet mesajı oluşturma mantığıdır. Başlangıçta, olduğu gibi iade ettim… ve sonra bir şey fark ettim. Burçlarım çok uzun olabilir. Bir hevesle, bunu mükemmel bir şekilde denedim RunJS:

let bad = 0;
for(let x=0;x<1000;x++) {
  let h = getHoroscope();
  if(h.length > 280) bad++;
}
console.log('i got '+bad + ' bad items');

Testimde çok uzun 30 ila 50 dizi gördüm. Bu değil fazla kötüydü ve düşündüm ki… belki de çok uzun olmayan bir tane elde edene kadar döngüye girebilirim? Sonra pek akıllıca olmayan bir düşüncem vardı – ya birkaç kez daha deneseydim?

let bad = 0;
for(let x=0;x<1000;x++) {
  let h = getHoroscope();
  if(h.length > 280) h = getHoroscope();
  if(h.length > 280) h = getHoroscope();
  if(h.length > 280) bad++;
}
console.log('i got '+bad + ' bad items');

Bu bildiğin gibi topal – ama tahmin et ne oldu? Testlerimde kötü sonuçların sayısı sıfıra indi.

Pipedream’de kod adımım şunu yapıyor:

export default defineComponent({
  async run({ steps, $ }) {

    let horoscope = getHoroscope();
    /*
    So, sometimes a horoscope is too big. If it is, we will try one more time and then just give up
    because this is just a stupid bot. Or heck, let's try 3 times total.
    */
    if(horoscope.length > 280) horoscope = getHoroscope();
    if(horoscope.length > 280) horoscope = getHoroscope();
    // I give up. It wasn't meant to be.
    if(horoscope.length > 280) $.flow.exit('I couldnt create a short enough horoscope and life is meaningless...');

    return horoscope;
  },
})

İşte örnek bir tweet:

Beğenirsen ole ver TBS Burç bir takip ve buraya kadar okuduğunuz için teşekkürler!

İlgili Makaleler

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.

Başa dön tuşu