![]()
I have just “finished?” my first twitterbot!
If you send it a direct message with part of the name of someone who works at Eclectic it will send you their contact details as a return direct message.
The API is very straight forward, only my lack of bash skills slowed me down.
The basic structure is this:
- Get all the direct messages into a text file
- Store the message IDs in an array
- Store the sender IDs in an array
- Store the message text in an array
- Loop through an array
- Reply with the requested details
- Delete the direct message
- End Loop
I have set this up in a cron to run every minute.
I am manually following people to ensure that this does not go to the “outside” world.
Please feel free to suggest improvements to the code, it’s been a LONG time since I have had to create any “proper” code!
#!/bin/bash
declare -a MSGIDS
declare -a SENDERIDS
declare -a MSGTEXTS
cd ~rossgoodman/scripts/twitterbot
DIRECT=./direct.txt
SEARCH=./telephone.txt
MSGIDFILE=./tmp_msgid.txt
SENDERIDFILE=./tmp_ids.txt
MSGTEXTFILE=./tmp_text.txt
SENDRESULTFILE=./tmp_sendresult.txt
DELETERESULTFILE=./tmp_deleteresult.txt
TWUSER=username
TWPASS=password
curl -u $TWUSER:$TWPASS http://twitter.com/direct_messages.xml > $DIRECT
grep "^ <id>" $DIRECT | sed -e 's/^[ /t]*//' -e 's/<id>//' -e 's/<\/id>//' > $MSGIDFILE
exec 10<$MSGIDFILE
let count=0
while read LINE <&10; do
MSGIDS[$count]=$LINE
((count++))
done
grep sender_id $DIRECT | sed -e 's/^[ /t]*//' -e 's/<sender_id>//' -e 's/<\/sender_id>//' > $SENDERIDFILE
exec 10<$SENDERIDFILE
let count=0
while read LINE <&10; do
SENDERIDS[$count]=$LINE
((count++))
done
exec 10>&-
grep text $DIRECT | sed -e 's/^[ /t]*//' -e 's/<text>//' -e 's/<\/text>//' > $MSGTEXTFILE
exec 10<$MSGTEXTFILE
let count=0
while read LINE <&10; do
MSGTEXTS[$count]=$LINE
((count++))
done
exec 10>&-
#echo Number of elements: ${#MSGIDS[@]}
for ((x=0;x<$count;x++)); do
let SENDERID=${SENDERIDS[${x}]}
let MESSAGEID=${MSGIDS[${x}]}
MESSAGETEXT=${MSGTEXTS[${x}]}
REPLY=`grep -i $MESSAGETEXT $SEARCH`
if [ ! "$REPLY" ]
then REPLY="Your search for $MESSAGETEXT found nothing"
fi
# echo MessageID : $MESSAGEID
# echo SenderID : $SENDERID
# echo Message : $MESSAGETEXT
# echo Reply : $REPLY
# echo Sending
curl -u $TWUSER:$TWPASS --data "user=$SENDERID" --data "text=$REPLY" http://twitter.com/direct_messages/new.xml > $SENDRESULTFILE
# echo Deleting
curl -u $TWUSER:$TWPASS http://twitter.com/direct_messages/destroy/$MESSAGEID.xml > $DELETERESULTFILE
done
rm $DIRECT
rm $MSGIDFILE
rm $SENDERIDFILE
rm $MSGTEXTFILE
rm $SENDRESULTFILE
rm $DELETERESULTFILE
7 replies on “My First TwitterBot”
Hi…
This looks good…
How can you be sure that the DM sent is actually there and not everyone ?…
Thanks…
Ron…
I don’t really understand your question.
Can you re-phrase it please?
Thanks
Ross
Hi, Thank You for a nice post.
Neither I know bash programming nor curl. But looks like this can be done using C/C++ too using curl (which I have to learn now).
Your script was well detailed and I was able to understand what you were trying to do. Thanks again.
.-= @vkvraju´s last blog ..Having problems installing software at office? =-.
Btw (off-topic), even I am using the same theme for my blog!! 🙂
.-= @vkvraju´s last blog ..Having problems installing software at office? =-.
It’s been many a year since I would classift myself as a programmer! I just had a problem to solve and experimented until I had something that worked!
Hi, Thank You for a nice post.
its more easy use php
Agreed, but I don’t really know PHP, this was more if an intellectual challenge !