क्या ट्रेलो में दी गई तिथि सीमा के लिए सभी गतिविधि को सूचीबद्ध करना संभव है?


11

मैं कई महीनों से ट्रेलो का उपयोग कर रहा हूं और मैं कार्ड पर गतिविधि को नियमित रूप से पोस्ट करता हूं क्योंकि मैं उन पर काम करता हूं और फिर उन्हें दाएं बाएं से 'पूर्ण' सूची में स्थानांतरित करता हूं। मैं नियत तारीखों का लाभ नहीं उठाता। क्या किसी दिए गए रेंज के लिए सभी कार्डों पर गतिविधि पाठ को सूचीबद्ध करने के लिए एक तंत्र है। मैं एक निश्चित अवधि के लिए स्टेटस रिपोर्ट फीड करने के लिए कुछ कच्चे डेटा खींचने की कोशिश कर रहा हूं।

उदाहरण: यदि वर्तमान दिन 15 मई, 2013 है। मैं 29 अप्रैल - 3 मई की अवधि के लिए 'गतिविधि' प्रविष्टियों वाले प्रत्येक कार्ड पर सभी गतिविधि पाठ की एक सूची तैयार करना चाहता हूं।


यह किया जा सकता है, लेकिन केवल ट्रोलो एपीआई का उपयोग करके। क्या आप अपने इच्छित डेटा को प्राप्त करने के लिए कुछ हल्की प्रोग्रामिंग करने में सहज हैं?
इयान हेनरी

@ इयानरी हाँ मैं सहज हूँ।
ब्रायन

जवाबों:


14

हां, यह ट्रेलो एपीआई और कुछ अन्य उपकरणों का उपयोग कर रहा है।

इस उत्तर पर निर्भर करता है HTTPie और JQ , दो स्वतंत्र रूप से उपलब्ध उपकरणों के माध्यम से स्थापित किया जा सकता है कि पिप और Homebrew आप Mac का उपयोग कर रहे हैं:

$ pip install httpie
$ brew install jq

HTTPieहम बोर्ड के लिए कच्चे एक्शन फीड प्राप्त करने के लिए ट्रेलो एपीआई का उपयोग कर सकते हैं, फिर हम jqउस डेटा को किसी उपयोगी चीज़ में बदलने के लिए उपयोग कर सकते हैं ।

चलो कुछ "सरल" से शुरू करते हैं। निम्नलिखित आदेश हमें अप्रैल 2013 के महीने में ट्रेलो देव बोर्ड पर की गई सभी टिप्पणियाँ देंगे। मैं इसे एक दूसरे में समझाऊंगा:

http GET "https://api.trello.com/1/boards/4d5ea62fd76aa1136000000c/actions" "since==Apr 1 2013 EDT" "before==May 1 2013 EDT" "limit==1000" "filter==commentCard" |  jq 'group_by(.data.card.id) | map({key: (.[0].data.card | "\(.name) (\(.id))"), value: map({date, member: .memberCreator.fullName, comment: .data.text}) }) | from_entries'

अगर सब कुछ योजना के अनुसार हुआ, तो हमें कुछ इस तरह देखना चाहिए:

{
  "Embed All The Things (516fcff9b998572923008fb2)": [
    {
      "comment": "Embed.ly now supports https better, so maybe we can upgrade to that version. http://embed.ly/embed/security/ssl",
      "member": "Brett Kiefer",
      "date": "2013-04-26T16:15:21.408Z"
    },
    {
      "comment": "Embedding a Google Map would be nice.",
      "member": "Michael Warkentin",
      "date": "2013-04-24T18:39:12.155Z"
    },
    {
      "comment": "Github issues / pull requests",
      "member": "Michael Warkentin",
      ...

ठंडा। यह एक एकल, उचित JSON ऑब्जेक्ट है जिसे हम आसानी से किसी भी अन्य प्रारूप में पार्स कर सकते हैं। अब हम इसके माध्यम से कदम बढ़ाते हैं ताकि हम इसे अपनी आवश्यकताओं के अनुरूप संशोधित करने के लिए अच्छी तरह समझ सकें।

http GET "https://api.trello.com/1/boards/4d5ea62fd76aa1136000000c/actions" "since==Apr 1 2013 EDT" "before==May 1 2013 EDT" "limit==1000" "filter==commentCard"

यह एकमात्र हिस्सा है जो ट्रेलो पर निर्भर करता है। हम आईडी के साथ बोर्ड के लिए सार्वजनिक एपीआई के खिलाफ एक अनुरोध करते हैं 4d5ea62fd76aa1136000000c- मुझे लगता है कि https://trello.com/dev पर जाकर और आईडी ट्रोलो को पूर्ण URL ( https://trello.com/board/trello-development/4d5ea62fd76aa1136000000c) में देखता है ।

sinceऔर beforeक्षेत्रों स्वतः स्पष्ट हैं। मैं एक निर्दिष्ट limitकी 1000वजह से है कि सबसे बड़ी प्रतिक्रिया Trello की अनुमति देगा है। यदि आपके बोर्ड की प्रासंगिक तिथि सीमा में एक हजार से अधिक टिप्पणियां हैं, तो यहां एक अधिक जटिल पृष्ठन समाधान की आवश्यकता होगी। मैं एक निर्दिष्ट filterकी commentCard, क्योंकि मैं केवल इस उत्तर के प्रयोजनों के लिए उन में रुचि रही है। यदि आप अधिक कार्रवाई प्रकार चाहते हैं, तो जैसे अल्पविराम से अलग की गई सूची निर्दिष्ट करें filter==commentCard,updateCard:idList,createCardट्रोलो एपीआई संदर्भ में वैध कार्रवाई प्रकार पाए जा सकते हैं ।

अगर हम इसे स्वयं चलाते हैं, तो हमें बहुत सी जानकारी मिलेगी जो कि समझ में आना मुश्किल है। तो हम इसे पाइप में jqमालिश करने के लिए इसे थोड़ा और उपयोगी बनाते हैं।

jq 'group_by(.data.card.id) | map({key: (.[0].data.card | "\(.name) (\(.id))"), value: map({date, member: .memberCreator.fullName, comment: .data.text}) }) | from_entries'

टुकड़ा-दर-टुकड़ा, हमारी jqस्क्रिप्ट निम्नलिखित परिवर्तनों को कर रही है, हर एक अगले ऑपरेटर को अपना परिणाम देता है:

  • group_by(.data.card.id)
    • Trello बस हमें कार्यों की एक सरणी देता है। हम उसे सारणियों के एक सरणी में बदल देते हैं, जहाँ प्रत्येक उप सरणी में दिए गए कार्ड के लिए केवल क्रियाएं होती हैं। मूल रूप से[[card1_action1, card1_action2...], [card2_action1, card2_action2...], ...]
  • map({key: KEY_EXPRESSION, value: VALUE_EXPRESSION}) | from_entries
    • हम सरणियों का एक सरणी नहीं चाहते हैं; हम सिर्फ फॉर्म की एक वस्तु चाहते हैं { card1: [action1, action2, ...], card2: [action1, action2, ...], ...}। एरे को की-वैल्यू पेयर के एरे में बदलकर, हम उसे from_entriesऑब्जेक्ट में बदलने के लिए इस्तेमाल कर सकते हैं । ठंडा।
  • अब देखते हैं कि मैंने KEY_EXPRESSIONऊपर क्या कहा :(.[0].data.card | "\(.name) (\(.id))")
    • यह काफी सरल है। हम पहली कार्रवाई से कार्ड प्रविष्टि लेते हैं (क्योंकि यह सभी कार्यों के लिए समान होना चाहिए, हम किसी भी को चुन सकते हैं, लेकिन पहला समझदार विकल्प की तरह लगता है)। फिर हम \(...)कुछ ऐसा बनाने के लिए स्ट्रिंग इंटरपोलेशन ( ) का उपयोग करते हैं जो दिखता है "name (id)"
  • VALUE_EXPRESSION है map({date, member: .memberCreator.fullName, comment: .data.text})
    • हम बस .सभी कार्यों की सरणी को अपरिवर्तित करने के लिए उपयोग कर सकते थे। लेकिन चूंकि क्रियाएं थोड़े बदसूरत हैं, हम उन्हें mapसरणी पर पिंग करके {date, member: .memberCreator.fullName, comment: .data.text}और प्रत्येक व्यक्तिगत एक्शन ऑब्जेक्ट पर लागू करके कुछ उपयोगी में मालिश कर रहे हैं ।
      • {date}के रूप में ही {date: date}है jq
      • बाकी सब कुछ बहुत आत्म-व्याख्यात्मक है। अब हमारे पास तारीख, सदस्य (सिर्फ उनका नाम है, लेकिन इसे और अधिक प्राप्त करना आसान होगा), और टिप्पणी का पाठ।

इसलिए यह अब आपके पास है। एर, उम्मीद है। हम इस डेटा को किसी भी स्क्रिप्टिंग भाषा में मालिश कर सकते हैं, लेकिन यह वास्तव में उसी के jqलिए बनाया गया था, इसलिए एक अच्छा नया टूल सीखने का यह एक अच्छा बहाना है। की जाँच करें JQ पुस्तिका अधिक के लिए।

अब, यह काम करता है क्योंकि ट्रेलो देव बोर्ड सार्वजनिक है। लेकिन क्या होगा अगर हम निजी डेटा चाहते हैं?

ऐसा करने का सही तरीका एक एपीआई टोकन उत्पन्न करना है। Trello एपीआई आरंभ करने की मार्गदर्शिका ऐसा करने के तरीके का विस्तृत runthrough है। लेकिन हम जल्दबाज़ी में हैं, इसलिए हम इसे आलसी आदमी की तरह कर रहे हैं ...

Chrome में http://trello.com पर लॉग इन करें और कंसोल खोलें (देखें> डेवलपर> जावास्क्रिप्ट कंसोल)। $.cookie('token')विंडो में टाइप करें । यह कुछ इस तरह वापस थूक देगा "uniquememberid/somegarbledstring"। उद्धरणों के बीच के हिस्से को कॉपी करें, और इस तरह से कुछ करने का अनुरोध संशोधित करें:

http GET "https://api.trello.com/1/boards/THE_ID_OF_THE_PRIVATE_BOARD_YOU_WANT/actions" "Cookie:token=uniquememberid/somegarbledstring" "since==Apr 1 2013 EDT" "before==May 1 2013 EDT" "limit==1000" "filter==commentCard" | jq ...

केवल एक चीज जो हमने बदली है वह "Cookie:token=uniquememberid/somegarbledstring"हैडर जोड़ना । इससे ट्रेलो टोकन का उपयोग करेगा। ध्यान दें कि टोकन बहुत निजी है ... यदि आप इसे किसी और को देते हैं, तो वे मूल रूप से आपके रूप में लॉग इन कर सकते हैं जब तक कि आप इसे ट्रोलो खाता पृष्ठ पर वापस नहीं लेते हैं । तो, आप जानते हैं, सावधान रहें। या एपीआई कुंजी / टोकन पीढ़ी चरण के माध्यम से जाना।

अब उस सटीक डेटा को प्राप्त करने के लिए दूर करें जिसे आपको अपने इच्छित प्रारूप में चाहिए।


3

मैंने reportfortrello.com नामक एक टूल बनाया, जो आपको दिखाएगा कि कार्ड कितने समय तक एक सूची में था।

यह मुफ़्त है और आपको प्रति बोर्ड 1000 क्रियाओं को देखने की अनुमति देता है। यह कार्ड मेम्बरशिप को भी ट्रैक कर सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.