Pipedream İş Akışında Python - CSV Dosya İşlemleri
Tally Form, Google Sheets API İş Akışı Örneği
Kodlama gereksimi olmaksızın veya minimum düzeyde kodlama ile hızlı bir şekilde kullanılabilir hale gelecek, kullanım sürecinde de minimum bakım gereksinimine ihtiyaç duyacak çözümlere yönelik örnek süreçlerine Tally ve Pipedream ile kaldığımız yerden devam edelim.
Sunucusuz bir çalışma zamanı (runtime)1 ve iş akışı servisi (workflow) olan Pipedream ile ilgili daha önce Pipedream Nedir? Nasıl Kullanılır? başlıklı bir yazı yayınlamış, yazının akabinde Pipedream Üzerinde XML-JSON İşlemleri ile örnek bir kullanıma değinmiştim. Servis yakın zamanda Product Hunt üzerinden yeni versiyonunu paylaşmış2 ve bu versiyonla birlikte dahil edilen yeni entegrasyonların yanı sıra iş akışı içerisinde Node.js'in yanı sıra Python3, Bash ve Go da kullanılabilir hale gelmişti. Ancak, geçen zaman içerisinde inceleme imkanım olmadı4.
Bu yazıda bahsi geçecek bir diğer servis ise Tally.so Nedir? başlıklı yazıda detaylıca değindiğim, doküman gibi çalışan form oluşturucu alternatiflerinden biri olan Tally olacak.
Pipedream Üzerinden Python İle CSV Dosya İşlemleri
Yazıda değineceğim örnekte iki farklı CSV dosyasında temel kontroller ve mantıksal işlemler gerçekleştirip ardından bu dosyaları birleştirecek ve bir sonuç cümlesini e-posta ile edineceğiz. Ayrıca, birleştirilen DataFrame tipindeki tabloları bir Google Sheets dosyasına aktaracağız.
İlgili dosya(lar) Tally form uygulaması üzerinden ziyaretçi tercihlerine göre yüklenecek ve çıktı özet haline getirilecek. Kod temelinde çok fazla detaya girmeyeceğim ve ilgili kodu zaman içerisinde geliştirmeye devam edeceğim.
Kodu görüntülemek yazının son paragrafında yer alan GitHub bağlantısını kullanabilirsiniz.
Tally Form İşlemleri
Tally kolay bir şekilde Pipedream ile entegre edilebilmekte. Form aracılığı ile gelen veriler ayrıca NodeJS ve Python aracılığı ile de düzenlenebilir5. Bu örnek bağlamında API entegrasyonu iş görecektir.
Formu görüntüleyen ziyaretçinin Yapmak istediğiniz işlem nedir? sorusuna verdiği yanıta göre dosya alanları görünecek ve ilgili dosyaların yüklenmesi sağlanacaktır.
Örnek formu nrjgE5 ID'i üzerinden görüntüleyebilirsiniz.
Formda yer alan alanlar ve bu alanların sahip olduğu değerler steps.trigger.event.fields
aracılığı ile edinilebilmekte. Yukarıdaki örnek görselde yer alan formun çıktısı (exports) aşağıdaki gibi olacaktır.
[
{
"key": "question_aBCd1E",
"label": null,
"type": "INPUT_EMAIL",
"value": "user@domain.com"
},
{
"key": "question_mJJkrR",
"label": null,
"type": "CHECKBOXES",
"value": [
"1fc00d88"
],
"options": [
{
"id": "ee551db8",
"text": "Source kontrolü"
},
{
"id": "1fc00d88",
"text": "Sipariş ID karşılaştırma"
}
]
},
{
"key": "question_mJJkrR_ee551db8",
"label": "Checkbox (Source kontrolü)",
"type": "CHECKBOXES",
"value": false
},
{
"key": "question_mJJkrR_1fc00d88",
"label": "Checkbox (Sipariş ID karşılaştırma)",
"type": "CHECKBOXES",
"value": true
},
{
"key": "question_wMYkzg",
"label": null,
"type": "FILE_UPLOAD",
"value": [
{
"id": "n0PKAZ",
"name": "file-1.csv",
"url": "https://storage.googleapis.com/tally-response-assets/.../.../file-1.csv",
"mimeType": "text/csv",
"size": 467
}
]
},
{
"key": "question_mJDaAY",
"label": null,
"type": "FILE_UPLOAD",
"value": [
{
"id": "w52JOM",
"name": "file-2.csv",
"url": "https://storage.googleapis.com/tally-response-assets/.../.../file-2.csv",
"mimeType": "text/csv",
"size": 42174
}
]
}
]
Bir sonraki adımda steps.trigger.event.fields[4].value[0].url
ve steps.trigger.event.fields[5].value[0].url
ile dosyalara ait URL, steps.trigger.event.fields[4].value[0].name
ve steps.trigger.event.fields[5].value[0].name
ile dosya isimleri, son olarak steps.trigger.event.fields[4].value[0].mimeType
ve steps.trigger.event.fields[5].value[0].mimeType
ile dosya tipi (mimeType) değerlerine ulaşabilir ve Python içerisinde bu değerleri kullanabiliriz.
Python İle CSV Dosya İşlemleri
CSV yerine Excel dosyası da elbette kullanılabilir. Ancak, örnek bağlamında kullanacağım dosyalar Shopify Orders ve GA4 keşif raporu çıktıları oldukları için ortak format olarak CSV dosyalarını seçtim. İlerleyen zaman içerisinde farklı örnek uygulamalar bağlamında farklı dosya tipleri ile ilgili işlemler gerçekleştirmeye çalışacağım.
Python ile CSV dosya işlemlerinde, Pandas kütüphanesine ait read_csv()
fonksiyonu ile dosya URL'i üzerinden işlem gerçekleştirilebilir. Ancak, Google Analytics raporlarında Header dışında özet bilgiler de CSV dosyası içerisinde yer alabildiği için dosya okuma işleminde hatalar yaşanabilir ve sütunlarda kaymalar söz konusu olabilir. Bu nedenle bu örnek bağlamında ilgili dosyaların /tmp
dizinine yüklenmesi, içeriklerinin kontrol edilmesi, gerekli ise alakasız kayıtların silinmesi gibi işlemlerle gerçekleştireceğim.
Elbette Pipedream çevrimiçi Python kodlarının işlenmesi için tek seçenek değil. Diğer API entegrasyonları ve işlemler için PythonAnywhere gibi alternatifler de denenebilir6.
Unutmadan ekleyeyim. Pipedream iş akışına eklenen Python işlem adımında ön tanımlı olarak handler
fonksiyonunu kullanır ve adımlar arasındaki veri akışı için pd
değişkenini parametre olarak tanımlar.
def handler(pd: "pipedream"):
Eğer pandas kütüphanesini kullanacaksanız bu değişkeni değiştirebilir ya da pandas için modül kısayolu (alias) belirtmeyebilir veya farklı bir tanım tercih edebilirsiniz.
import pandas
def handler(pd: "pipedream"):
Google Analytics 4 keşif raporunda şu metrik ve boyutların seçili olduğunu varsayalım.
# --------------------------------------- #
# GA4
# Free form 1
# 20220815-20220818
# --------------------------------------- #
Date,Transaction ID,Transactions,Ecommerce revenue,Event count
,,7,33975.92,7,Grand total
20220816,#51885,1,13690,1
Shopify siparişleri ise Orders üzerinden tek formatta iletilmekte.
Name,Email,Financial Status,Paid at,Fulfillment Status,Fulfilled at,Accepts Marketing,Currency,Subtotal,Shipping,Taxes,Total,Discount Code,Discount Amount,Shipping Method,Created at,Lineitem quantity,Lineitem name,Lineitem price,Lineitem compare at price,Lineitem sku,Lineitem requires shipping,Lineitem taxable,Lineitem fulfillment status,Billing Name,Billing Street,Billing Address1,Billing Address2,Billing Company,Billing City,Billing Zip,Billing Province,Billing Country,Billing Phone,Shipping Name,Shipping Street,Shipping Address1,Shipping Address2,Shipping Company,Shipping City,Shipping Zip,Shipping Province,Shipping Country,Shipping Phone,Notes,Note Attributes,Cancelled at,Payment Method,Payment Reference,Refunded Amount,Vendor,Id,Tags,Risk Level,Source,Lineitem discount,Tax 1 Name,Tax 1 Value,Tax 2 Name,Tax 2 Value,Tax 3 Name,Tax 3 Value,Tax 4 Name,Tax 4 Value,Tax 5 Name,Tax 5 Value,Phone,Receipt Number,Duties,Billing Province Name,Shipping Province Name,Payment ID,Payment Terms Name,Next Payment Due At,Payment References
#51885,,paid,2022-08-01 09:53:46 -0400,unfulfilled,,no,USD,467.99,0,0,467.99,,0,Standard,2022-07-27 15:02:48 -0400,1,,467.99,,,TRUE,TRUE,pending,,,,,,,,,,,,,,,,,,,,,,,,PayPal Express Checkout,,0,,,,Low,web,0,,,,,,,,,,,,,,,,,,,
GA4 raporundaki 0:6 ve 7. satırların temizlenmesi gerekmekte. Shopify tablosunda ise siparişlere ait Name, Currency, Total, Payment Method, Source sütunları işlemler için yeterli olacaktır.
İlgili sütunları bir sonraki aşamada Sheets API kullanarak belirtilen dosyaya eklemen üzere işleme alabiliriz.
Range olarak 2. satır itibariyle veriler eklenerek hücreler (cells) sürekli güncel tutulabilir ve tablodaki diğer alanların (süzme, formüller, vb.) biçim ve özelliklerini koruması sağlanabilir.
ceaksan/ShopifyAccuracyRate üzerinden ilgili kodlara ulaşabilirsiniz.
Yukarıdaki GitHub bağlantısı aracılığı ile Jupyter dosyası ve alternatif Sheets API örneklerine ulaşabilirsiniz. Bu örneğin yanı sıra, örneği daha da geliştirmek isterseniz Google Sheets API açıklamalarına7 göz atabilir, Pipedream tarafından paylaşılan videoları8 izleyebilir ve diğer geliştirici bloglarını9 inceleyebilirsiniz.
- Bir bilgisayar programının çalıştırıldığı andan itibaren sonlandığı zamana kadar geçen zaman aralığını ifade eder. Bkz. Runtime (program lifecycle phase). Wikipedia ↩
- Pipedream v2 (Product Hunt) ↩
- Python. Pipedream Quickstart, Python API Integrations. Pipedream Apps ↩
- We announced @pipedream 2.0 on #ProductHunt today! Pravin Savkar (Twitter) ↩
- Tally API Integrations. Pipedream Ap ↩
- PythonAnywhere. Host, run, and code Python in the cloud! ↩
- Method: spreadsheets.values.batchUpdate. Sheets API, Google Sheets API Overview. Sheets API, Requests. Sheets API ↩
- Pipedream. Sentiment Analysis on /r/nfl Reddit posts (Youtube) ↩
- Raymond Camden. 2022. Testing out the new Pipedream to Get Trance Releases ↩