אביב הגדרת טוויטר חברתית

החלק הראשון של הסדרה מתמקד בעבודה הראשונית של צריכת ה- API של REST StackExchange על מנת לאחזר את השאלות העיקריות שלה. זֶה חלק שני יתמקד בהגדרת התמיכה הדרושה לאינטראקציה עם ממשקי ה- API של REST בטוויטר באמצעות פרויקט ה- Social Social Spring. המטרה הסופית היא להיות מסוגל לצייץ את השאלות הללו, שתיים ביום, במספר חשבונות, שכל אחד מהם מתמקד בנושא אחד.

1. שימוש בטוויטר חברתי באביב

התלות הנדרשת לשימוש בפרויקט האביב החברתי של טוויטר הן פשוטות. ראשית, אנו מגדירים אביב-חברתי-טוויטר עצמה:

 org.springframework.social spring-social-twitter 1.1.0. שחרור 

לאחר מכן, עלינו לבטל חלק מהתלות שלו בגרסאות עדכניות יותר:

 org.springframework spring-core 4.1.0.RELEASE org.springframework spring-web 4.1.0.RELEASE org.codehaus.jackson jackson-mapper-asl 1.9.13 

שניהם ליבת קפיץ ו קפיץ-רשת מוגדרים כתלות על ידי אביב-חברתי-טוויטר אבל עם גרסאות ישנות3.0.7.שחרור ו 3.1.0 שחרור בהתאמה. עקיפת אלה בפום שלנו מבטיחה שהפרויקט משתמש בגרסאות העדכניות שהגדרנו במקום בגרסאות הישנות הללו.

2. יצירת אפליקציית טוויטר

מקרה השימוש הזה - ציוץ על חשבון אישי ולא בשם משתמשים אחרים בחשבונות שלהם, זה פשוט. העובדה שהיא פשוטה מאפשרת לנו לוותר על מרבית התזמור OAuth הדרוש אם היישום יצטרך לצייץ עבור מספר משתמשים בכל אחד מחשבונות הטוויטר שלהם.

אז, למקרה המשתמש שלנו, נעשה זאת ליצור את TwitterTemplate באופן ישיר, מכיוון שנוכל להגדיר ידנית את כל מה שאנחנו צריכים לעשות זאת.

הדבר הראשון שאנחנו צריכים זה א יישום dev - ניתן ליצור כאן אחד לאחר הכניסה. לאחר יצירת היישום, יהיה לנו מפתח הצרכן ו סוד הצרכן - אלה מתקבלים מדף היישום - על פרטים הכרטיסייה, מתחת הגדרות OAuth.

כמו כן, על מנת לאפשר לאפליקציה לצייץ בחשבון, תקרא ותכתוב גִישָׁה יש להגדיר להחליף את ברירת המחדל לקרוא רק הרשאות.

3. הקצאה א TwitterTemplate

לאחר מכן, TwitterTemplate דורש אסימון גישה ו גישה לסוד אסימון להיות מוגן. אלה יכולים להפיק גם מדף היישום - תחת ה- פרטים לשונית - צור אסימון גישה שלי. ניתן גם לאחזר את אסימון הגישה ואת הסוד מתחת ל- כלי OAuth הכרטיסייה.

תמיד ניתן לחדש חדשים פרטים הכרטיסייה, דרך צור מחדש את אסימון הגישה שלי פעולה.

בשלב זה יש לנו את כל מה שאנחנו צריכים - מפתח הצרכן וסוד הצרכן, כמו גם אסימון הגישה וסוד אסימון הגישה - מה שאומר שאנחנו יכולים להמשיך ליצור את TwitterTemplate לאפליקציה זו:

טוויטר טמפלט חדש (consumerKey, consumerSecret, accessToken, accessTokenSecret);

4. תבנית אחת לכל חשבון

עכשיו כשראינו ליצור סינגל TwitterTemplate ל חשבון יחידאנחנו יכולים להסתכל שוב על המקרה שלנו - אנחנו צריכים לצייץ בכמה חשבונות - מה שאומר שאנחנו צריכים כמה TwitterTemplate מקרים.

ניתן ליצור אותם בקלות על פי בקשה, עם מנגנון פשוט:

@Component בכיתה ציבורית TwitterTemplateCreator {@ סביבה פרטית בסביבה פרטית; טוויטר ציבורי getTwitterTemplate (שם חשבון מחרוזת) {מחרוזת משתמש מפתח = env.getProperty (שם חשבון + ".consumerKey"); מחרוזת consumerSecret = env.getProperty (accountName + ".consumerSecret"); מחרוזת accessToken = env.getProperty (accountName + ".accessToken"); מחרוזת accessTokenSecret = env.getProperty (accountName + ".accessTokenSecret"); תנאים מוקדמים. CheckNotNull (consumerKey); תנאים מוקדמים. CheckNotNull (consumerSecret); תנאים מוקדמים. CheckNotNull (accessToken); Preconditions.checkNotNull (accessTokenSecret); TwitterTemplate twitterTemplate = TwitterTemplate חדש (consumerKey, consumerSecret, accessToken, accessTokenSecret); להחזיר twitterTemplate; }}

ארבעת החפצים הביטחוניים הם כמובן מוחצן בקובץ מאפיינים, לפי חשבון; לדוגמא, עבור חשבון SpringAtSO:

SpringAtSO.consumerKey = nqYezCjxkHabaX6cdte12g SpringAtSO.consumerSecret = 7REmgFW4SnVWpD4EV5Zy9wB2ZEMM9WKxTaZwrgX3i4A SpringAtSO.accessToken = 1197830142-t44T7vwgmOnue8EoAxI1cDyDAEBAvple80s1SQ3 SpringAtSO.accessTokenSecret = ZIpghEJgFGNGQZzDFBT5TgsyeqDKY2zQmYsounPafE

זה מאפשר שילוב טוב של גמישות ובטיחות - אישורי האבטחה אינם חלק מבסיס הקוד (שהוא מקור פתוח) אלא חיים באופן עצמאי במערכת הקבצים ונאספים על ידי Spring וזמינים בסביבת Spring באמצעות תצורה פשוטה:

@Configuration @PropertySource ({"file: ///opt/stack/twitter.properties"}) TwitterConfig בכיתה ציבורית {//}

נכסים באביב הם נושא שכבר דנו בו, ולכן לא נפרט יותר בנושא זה כאן.

לבסוף, א מִבְחָן יוודא שלחשבון יש את פרטי האבטחה הדרושים הזמינים בסביבת האביב; אם הנכסים אינם קיימים, getTwitterTemplate ההיגיון אמור להיכשל במבחן עם NullPointerException:

@RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration (class = {TwitterConfig.class}) מחלקה ציבורית TwitterTemplateCreatorIntegrationTest {@Autowired פרטי TwitterTemplateCreator twitterTemplateCreator; // @Test public void givenValidAccountSpringAtSO_whenRetrievingTwitterClient_thenNoException () {twitterTemplateCreator.getTwitterTemplate (SimpleTwitterAccount.SpringAtSO.name ()); }}

5. ציוץ

עם ה TwitterTemplate נוצר, בואו נפנה למעשה של ציוץ. לשם כך נשתמש בשירות פשוט מאוד, המקבל א TwitterTemplate ושימוש ב- API הבסיסי שלו ליצירת ציוץ:

@Service בכיתה ציבורית TwitterService {לוגר לוגר פרטי = LoggerFactory.getLogger (getClass ()); ציוץ בטל פומבי (טוויטר טוויטר, טוויטר טקסט מחרוזת) {נסה {twitter.timelineOperations (). updateStatus (tweetText); } לתפוס (RuntimeException לשעבר) {logger.error ("לא ניתן לצייץ" + tweetText, לשעבר); }}}

6. בדיקת ה- TwitterTemplate

ולבסוף, אנו יכולים לכתוב מבחן אינטגרציה לביצוע כל תהליך הקצאת א TwitterTemplate עבור חשבון וציוץ על חשבון זה:

@RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration (מחלקות = {TwitterConfig.class}) מחלקה ציבורית TweetServiceLiveTest {@TwitterService פרטית מאוירת TwitterService; @TwitterTemplateCreator פרטית אוטומטית twitterCreator; @ מבחן ציבורי בטל כאשר ציוץ_אתהלא חשיפות () {טוויטר twitterTemplate = twitterCreator.getTwitterTemplate ("SpringAtSO"); twitterService.tweet (twitterTemplate, "ציוץ ראשון"); }}

7. מסקנה

בשלב זה, ממשק ה- API של Twitter שיצרנו נפרד לחלוטין מממשק ה- API של StackExchange וניתן להשתמש בו ללא תלות באותו שימוש מסוים, כדי לצייץ כל דבר.

השלב ההגיוני הבא בתהליך של ציוץ שאלות מחשבונות Stack Exchange הוא יצירת רכיב - אינטראקציה עם הן ממשקי ה- API של טוויטר והן של StackExchange שהצגנו עד כה - זה יהיה מוקד המאמר הבא בסדרה זו.


$config[zx-auto] not found$config[zx-overlay] not found