Why is this quoted tweet pointing to itself? - twitter

I am retrieving tweets with the Twitter API and I do this:
I check that they have a quoted_status, then I replace the URL in url_info->url that has the tweet_data->quoted_status->id_str within the url_info->expanded_url. This way, I know the URL is the one of the quoted tweet, and I can recover the data and display it below.
And this usually works, but not with this tweet:
stdClass Object
(
[created_at] => Wed Dec 14 08:30:32 +0000 2016
[id] => 8.0895229853789E+17
[id_str] => 808952298537885696
[text] => Volem felicitar al Centre d'Estudis Montseny, guanyadors d'aquest concurs, i a #stlisieux, que han estat finalistes… 'shortened_url'/CGqkTNPPB1
[truncated] => 1
[entities] => stdClass Object
(
[hashtags] => Array
(
)
[symbols] => Array
(
)
[user_mentions] => Array
(
[0] => stdClass Object
(
[screen_name] => stlisieux
[name] => Col·legi ST Lisieux
[id] => 3064329677
[id_str] => 3064329677
[indices] => Array
(
[0] => 79
[1] => 89
)
)
)
[urls] => Array
(
[0] => stdClass Object
(
[url] => 'shortened_url'CGqkTNPPB1
[expanded_url] => https://twitter.com/i/web/status/808952298537885696
[display_url] => twitter.com/i/web/status/8…
[indices] => Array
(
[0] => 117
[1] => 140
)
)
)
)
[source] => Twitter Web Client
[in_reply_to_status_id] =>
[in_reply_to_status_id_str] =>
[in_reply_to_user_id] =>
[in_reply_to_user_id_str] =>
[in_reply_to_screen_name] =>
[user] => stdClass Object
(
[id] => 493037120
[id_str] => 493037120
[name] => Clickedu
[screen_name] => Clickedu
[location] => España
[description] => La plataforma para colegios e institutos. | La plataforma per a escoles i instituts. 'shortened_url'/NBZbqw7Qpn
[url] => 'shortened_url'/00a8v8WUv5
[entities] => stdClass Object
(
[url] => stdClass Object
(
[urls] => Array
(
[0] => stdClass Object
(
[url] => 'shortened_url'/00a8v8WUv5
[expanded_url] => http://www.clickartedu.com/
[display_url] => clickartedu.com
[indices] => Array
(
[0] => 0
[1] => 22
)
)
)
)
[description] => stdClass Object
(
[urls] => Array
(
[0] => stdClass Object
(
[url] => 'shortened_url'/NBZbqw7Qpn
[expanded_url] => http://www.clickedu.eu
[display_url] => clickedu.eu
[indices] => Array
(
[0] => 85
[1] => 107
)
)
)
)
)
[protected] =>
[followers_count] => 2960
[friends_count] => 1998
[listed_count] => 79
[created_at] => Wed Feb 15 11:29:55 +0000 2012
[favourites_count] => 8529
[utc_offset] => 3600
[time_zone] => Madrid
[geo_enabled] => 1
[verified] =>
[statuses_count] => 3840
[lang] => ca
[contributors_enabled] =>
[is_translator] =>
[is_translation_enabled] =>
[profile_background_color] => AD0C40
[profile_background_image_url] => http://pbs.twimg.com/profile_background_images/444501732022697984/vMM1qgYt.jpeg
[profile_background_image_url_https] => https://pbs.twimg.com/profile_background_images/444501732022697984/vMM1qgYt.jpeg
[profile_background_tile] =>
[profile_image_url] => http://pbs.twimg.com/profile_images/567973366670172160/1opAPyhE_normal.jpeg
[profile_image_url_https] => https://pbs.twimg.com/profile_images/567973366670172160/1opAPyhE_normal.jpeg
[profile_banner_url] => https://pbs.twimg.com/profile_banners/493037120/1477042035
[profile_link_color] => AD0C40
[profile_sidebar_border_color] => FFFFFF
[profile_sidebar_fill_color] => DDEEF6
[profile_text_color] => 333333
[profile_use_background_image] => 1
[has_extended_profile] =>
[default_profile] =>
[default_profile_image] =>
[following] =>
[follow_request_sent] =>
[notifications] =>
[translator_type] => none
)
[geo] =>
[coordinates] =>
[place] =>
[contributors] =>
[is_quote_status] => 1
[quoted_status_id] => 8.0870805032451E+17
[quoted_status_id_str] => 808708050324508672
[quoted_status] => stdClass Object
(
[created_at] => Tue Dec 13 16:19:58 +0000 2016
[id] => 8.0870805032451E+17
[id_str] => 808708050324508672
[text] => Així és com veuen l’ictus els alumnes del Centre d’Estudis Montseny, que han guanyat el 18è concurs Pinta La Marató… 'shortened_url'/tts4uGmKWy
[truncated] => 1
[entities] => stdClass Object
(
[hashtags] => Array
(
)
[symbols] => Array
(
)
[user_mentions] => Array
(
)
[urls] => Array
(
[0] => stdClass Object
(
[url] => 'shortened_url'/tts4uGmKWy
[expanded_url] => https://twitter.com/i/web/status/808708050324508672
[display_url] => twitter.com/i/web/status/8…
[indices] => Array
(
[0] => 117
[1] => 140
)
)
)
)
[source] => Twitter Web Client
[in_reply_to_status_id] =>
[in_reply_to_status_id_str] =>
[in_reply_to_user_id] =>
[in_reply_to_user_id_str] =>
[in_reply_to_screen_name] =>
[user] => stdClass Object
(
[id] => 18045654
[id_str] => 18045654
[name] => La Marató
[screen_name] => la_marato
[location] => Catalunya
[description] => El 18 de desembre La Marató fa 25 anys amb un programa dedicat a l'ictus i les lesions medul·lars i cerebrals traumà tiques.
[url] => 'shortened_url'/iCXlb20x3w
[entities] => stdClass Object
(
[url] => stdClass Object
(
[urls] => Array
(
[0] => stdClass Object
(
[url] => 'shortened_url'/iCXlb20x3w
[expanded_url] => http://www.tv3.cat/marato/
[display_url] => tv3.cat/marato/
[indices] => Array
(
[0] => 0
[1] => 22
)
)
)
)
[description] => stdClass Object
(
[urls] => Array
(
)
)
)
[protected] =>
[followers_count] => 46627
[friends_count] => 352
[listed_count] => 333
[created_at] => Thu Dec 11 11:38:21 +0000 2008
[favourites_count] => 1469
[utc_offset] => 3600
[time_zone] => Madrid
[geo_enabled] =>
[verified] =>
[statuses_count] => 3160
[lang] => ca
[contributors_enabled] =>
[is_translator] =>
[is_translation_enabled] =>
[profile_background_color] => DCE4E8
[profile_background_image_url] => http://pbs.twimg.com/profile_background_images/378800000099697740/e6dc40b2a9233a582dc14394aed732a7.jpeg
[profile_background_image_url_https] => https://pbs.twimg.com/profile_background_images/378800000099697740/e6dc40b2a9233a582dc14394aed732a7.jpeg
[profile_background_tile] =>
[profile_image_url] => http://pbs.twimg.com/profile_images/748843776345513985/WXSEA15G_normal.jpg
[profile_image_url_https] => https://pbs.twimg.com/profile_images/748843776345513985/WXSEA15G_normal.jpg
[profile_banner_url] => https://pbs.twimg.com/profile_banners/18045654/1481702408
[profile_link_color] => 0084B4
[profile_sidebar_border_color] => FFFFFF
[profile_sidebar_fill_color] => DDEEF6
[profile_text_color] => 333333
[profile_use_background_image] => 1
[has_extended_profile] =>
[default_profile] =>
[default_profile_image] =>
[following] =>
[follow_request_sent] =>
[notifications] =>
[translator_type] => none
)
[geo] =>
[coordinates] =>
[place] =>
[contributors] =>
[is_quote_status] =>
[retweet_count] => 15
[favorite_count] => 21
[favorited] =>
[retweeted] =>
[possibly_sensitive] =>
[lang] => und
)
[retweet_count] => 2
[favorite_count] => 2
[favorited] =>
[retweeted] =>
[possibly_sensitive] =>
[lang] => und
)
Here, the [expanded_url] => https://twitter.com/i/web/status/808952298537885696 is pointing to the tweet itself, not to the quoted tweet as usual.
Is this common?
How can I link the shortened URL in the text body with the quoted tweet? I don't see any connexion between them, so I don't know how to replace the link for the tweet content, as I don't know how to differentiate the quoted tweet URL from other URLs that may be in the tweet.

Since the truncated value in this Tweet is true (1), this indicates that you are looking at an extended Tweet. You can read more about the new Tweet format in the Twitter developer Upcoming Changes to Tweets documentation. If you use the tweet_mode=extended option you will be able to retrieve the full Tweet without the embedded link to the web version of the Tweet.

Related

how to download files with different extension with send_file command

I have the following code, I want to download files of different mime types. Ie docx, pdf etc. I have defined my download action, then bellow am trying to get the file extension for which i direct it to the correct mimetype. But this doesnot seem to work
def download
#uploadedfile = Uploadedfile.find(params[:id])
send_data(
#uploadedfile.upload_file.path,
:filename => #uploadedfile.name,
# :type => 'application/pdf',
# :type=>"*/*",
# :type=> "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
#:type=> MIME::Types.type_for(#uploadedfile.name).to_s,
#:content_type => %w(application/vnd.openxmlformats-officedocument.wordprocessingml.document application/pdf),
:type=> file_extension,
:stream => true,
:x_sendfile=>true,
:url_based_filename => true
)
flash[:notice] = "The file has been downloaded"
end
def file_extension
#uploadedfile = Uploadedfile.find(params[:id])
# ext = File.extname("#{#uploadedfile.name}")
ext = File.extname(#uploadedfile.name)
if (ext == ".pdf")
content_type = "application/pdf"
elsif (ext == ".doc") || ( ext == ".rtf") || ( ext == ".docx")
content_type = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
elsif (ext == ".txt")
content_type = "text/Plain"
elsif (ext == ".rar")
content_type = "Application/x-rar-compressed"
elsif (ext == ".jpeg" || ext==".jpg")
content_type = "image/jpeg"
else
content_type = "Application/octet-stream"
end
content_type
end
but this seems not to work, where am i going wrong? Please help
Here's how i do this.
In config/initializers/constants.rb
MIME_TYPES_FROM_EXTENSION = {
".3dm" => "x-world/x-3dmf",
".3dmf" => "x-world/x-3dmf",
".a" => "application/octet-stream",
".aab" => "application/x-authorware-bin",
".aam" => "application/x-authorware-map",
".aas" => "application/x-authorware-seg",
".abc" => "text/vnd.abc",
".acgi" => "text/html",
".afl" => "video/animaflex",
".ai" => "application/postscript",
".aif" => "audio/aiff",
".aif" => "audio/x-aiff",
".aifc" => "audio/aiff",
".aifc" => "audio/x-aiff",
".aiff" => "audio/aiff",
".aiff" => "audio/x-aiff",
".aim" => "application/x-aim",
".aip" => "text/x-audiosoft-intra",
".ani" => "application/x-navi-animation",
".aos" => "application/x-nokia-9000-communicator-add-on-software",
".aps" => "application/mime",
".arc" => "application/octet-stream",
".arj" => "application/arj",
".arj" => "application/octet-stream",
".art" => "image/x-jg",
".asf" => "video/x-ms-asf",
".asm" => "text/x-asm",
".asp" => "text/asp",
".asx" => "application/x-mplayer2",
".asx" => "video/x-ms-asf",
".asx" => "video/x-ms-asf-plugin",
".au" => "audio/basic",
".au" => "audio/x-au",
".avi" => "application/x-troff-msvideo",
".avi" => "video/avi",
".avi" => "video/msvideo",
".avi" => "video/x-msvideo",
".avs" => "video/avs-video",
".bcpio" => "application/x-bcpio",
".bin" => "application/mac-binary",
".bin" => "application/macbinary",
".bin" => "application/octet-stream",
".bin" => "application/x-binary",
".bin" => "application/x-macbinary",
".bm" => "image/bmp",
".bmp" => "image/bmp",
".bmp" => "image/x-windows-bmp",
".boo" => "application/book",
".book" => "application/book",
".boz" => "application/x-bzip2",
".bsh" => "application/x-bsh",
".bz" => "application/x-bzip",
".bz2" => "application/x-bzip2",
".c" => "text/plain",
".c" => "text/x-c",
".c++" => "text/plain",
".cat" => "application/vnd.ms-pki.seccat",
".cc" => "text/plain",
".cc" => "text/x-c",
".ccad" => "application/clariscad",
".cco" => "application/x-cocoa",
".cdf" => "application/cdf",
".cdf" => "application/x-cdf",
".cdf" => "application/x-netcdf",
".cer" => "application/pkix-cert",
".cer" => "application/x-x509-ca-cert",
".cha" => "application/x-chat",
".chat" => "application/x-chat",
".class" => "application/java",
".class" => "application/java-byte-code",
".class" => "application/x-java-class",
".com" => "application/octet-stream",
".com" => "text/plain",
".conf" => "text/plain",
".cpio" => "application/x-cpio",
".cpp" => "text/x-c",
".cpt" => "application/mac-compactpro",
".cpt" => "application/x-compactpro",
".cpt" => "application/x-cpt",
".crl" => "application/pkcs-crl",
".crl" => "application/pkix-crl",
".crt" => "application/pkix-cert",
".crt" => "application/x-x509-ca-cert",
".crt" => "application/x-x509-user-cert",
".csh" => "application/x-csh",
".csh" => "text/x-script.csh",
".css" => "application/x-pointplus",
".css" => "text/css",
".cxx" => "text/plain",
".dcr" => "application/x-director",
".deepv" => "application/x-deepv",
".def" => "text/plain",
".der" => "application/x-x509-ca-cert",
".dif" => "video/x-dv",
".dir" => "application/x-director",
".dl" => "video/dl",
".dl" => "video/x-dl",
".doc" => "application/msword",
".dot" => "application/msword",
".dp" => "application/commonground",
".drw" => "application/drafting",
".dump" => "application/octet-stream",
".dv" => "video/x-dv",
".dvi" => "application/x-dvi",
".dwf" => "drawing/x-dwf (old)",
".dwf" => "model/vnd.dwf",
".dwg" => "application/acad",
".dwg" => "image/vnd.dwg",
".dwg" => "image/x-dwg",
".dxf" => "application/dxf",
".dxf" => "image/vnd.dwg",
".dxf" => "image/x-dwg",
".dxr" => "application/x-director",
".el" => "text/x-script.elisp",
".elc" => "application/x-bytecode.elisp (compiled elisp)",
".elc" => "application/x-elc",
".env" => "application/x-envoy",
".eps" => "application/postscript",
".es" => "application/x-esrehber",
".etx" => "text/x-setext",
".evy" => "application/envoy",
".evy" => "application/x-envoy",
".exe" => "application/octet-stream",
".f" => "text/plain",
".f" => "text/x-fortran",
".f77" => "text/x-fortran",
".f90" => "text/plain",
".f90" => "text/x-fortran",
".fdf" => "application/vnd.fdf",
".fif" => "application/fractals",
".fif" => "image/fif",
".fli" => "video/fli",
".fli" => "video/x-fli",
".flo" => "image/florian",
".flx" => "text/vnd.fmi.flexstor",
".fmf" => "video/x-atomic3d-feature",
".for" => "text/plain",
".for" => "text/x-fortran",
".fpx" => "image/vnd.fpx",
".fpx" => "image/vnd.net-fpx",
".frl" => "application/freeloader",
".funk" => "audio/make",
".g" => "text/plain",
".g3" => "image/g3fax",
".gif" => "image/gif",
".gl" => "video/gl",
".gl" => "video/x-gl",
".gsd" => "audio/x-gsm",
".gsm" => "audio/x-gsm",
".gsp" => "application/x-gsp",
".gss" => "application/x-gss",
".gtar" => "application/x-gtar",
".gz" => "application/x-compressed",
".gz" => "application/x-gzip",
".gzip" => "application/x-gzip",
".gzip" => "multipart/x-gzip",
".h" => "text/plain",
".h" => "text/x-h",
".hdf" => "application/x-hdf",
".help" => "application/x-helpfile",
".hgl" => "application/vnd.hp-hpgl",
".hh" => "text/plain",
".hh" => "text/x-h",
".hlb" => "text/x-script",
".hlp" => "application/hlp",
".hlp" => "application/x-helpfile",
".hlp" => "application/x-winhelp",
".hpg" => "application/vnd.hp-hpgl",
".hpgl" => "application/vnd.hp-hpgl",
".hqx" => "application/binhex",
".hqx" => "application/binhex4",
".hqx" => "application/mac-binhex",
".hqx" => "application/mac-binhex40",
".hqx" => "application/x-binhex40",
".hqx" => "application/x-mac-binhex40",
".hta" => "application/hta",
".htc" => "text/x-component",
".htm" => "text/html",
".html" => "text/html",
".htmls" => "text/html",
".htt" => "text/webviewhtml",
".htx" => "text/html",
".ice" => "x-conference/x-cooltalk",
".ico" => "image/x-icon",
".idc" => "text/plain",
".ief" => "image/ief",
".iefs" => "image/ief",
".iges" => "application/iges",
".iges" => "model/iges",
".igs" => "application/iges",
".igs" => "model/iges",
".ima" => "application/x-ima",
".imap" => "application/x-httpd-imap",
".inf" => "application/inf",
".ins" => "application/x-internett-signup",
".ip" => "application/x-ip2",
".isu" => "video/x-isvideo",
".it" => "audio/it",
".iv" => "application/x-inventor",
".ivr" => "i-world/i-vrml",
".ivy" => "application/x-livescreen",
".jam" => "audio/x-jam",
".jav" => "text/plain",
".jav" => "text/x-java-source",
".java" => "text/plain",
".java" => "text/x-java-source",
".jcm" => "application/x-java-commerce",
".jfif" => "image/jpeg",
".jfif" => "image/pjpeg",
".jfif-tbnl" => "image/jpeg",
".jpe" => "image/jpeg",
".jpe" => "image/pjpeg",
".jpeg" => "image/jpeg",
".jpeg" => "image/pjpeg",
".jpg" => "image/jpeg",
".jpg" => "image/pjpeg",
".jps" => "image/x-jps",
".js" => "application/x-javascript",
".jut" => "image/jutvision",
".kar" => "audio/midi",
".kar" => "music/x-karaoke",
".ksh" => "application/x-ksh",
".ksh" => "text/x-script.ksh",
".la" => "audio/nspaudio",
".la" => "audio/x-nspaudio",
".lam" => "audio/x-liveaudio",
".latex" => "application/x-latex",
".lha" => "application/lha",
".lha" => "application/octet-stream",
".lha" => "application/x-lha",
".lhx" => "application/octet-stream",
".list" => "text/plain",
".lma" => "audio/nspaudio",
".lma" => "audio/x-nspaudio",
".log" => "text/plain",
".lsp" => "application/x-lisp",
".lsp" => "text/x-script.lisp",
".lst" => "text/plain",
".lsx" => "text/x-la-asf",
".ltx" => "application/x-latex",
".lzh" => "application/octet-stream",
".lzh" => "application/x-lzh",
".lzx" => "application/lzx",
".lzx" => "application/octet-stream",
".lzx" => "application/x-lzx",
".m" => "text/plain",
".m" => "text/x-m",
".m1v" => "video/mpeg",
".m2a" => "audio/mpeg",
".m2v" => "video/mpeg",
".m3u" => "audio/x-mpequrl",
".man" => "application/x-troff-man",
".map" => "application/x-navimap",
".mar" => "text/plain",
".mbd" => "application/mbedlet",
".mc$" => "application/x-magic-cap-package-1.0",
".mcd" => "application/mcad",
".mcd" => "application/x-mathcad",
".mcf" => "image/vasa",
".mcf" => "text/mcf",
".mcp" => "application/netmc",
".me" => "application/x-troff-me",
".mht" => "message/rfc822",
".mhtml" => "message/rfc822",
".mid" => "application/x-midi",
".mid" => "audio/midi",
".mid" => "audio/x-mid",
".mid" => "audio/x-midi",
".mid" => "music/crescendo",
".mid" => "x-music/x-midi",
".midi" => "application/x-midi",
".midi" => "audio/midi",
".midi" => "audio/x-mid",
".midi" => "audio/x-midi",
".midi" => "music/crescendo",
".midi" => "x-music/x-midi",
".mif" => "application/x-frame",
".mif" => "application/x-mif",
".mime" => "message/rfc822",
".mime" => "www/mime",
".mjf" => "audio/x-vnd.audioexplosion.mjuicemediafile",
".mjpg" => "video/x-motion-jpeg",
".mm" => "application/base64",
".mm" => "application/x-meme",
".mme" => "application/base64",
".mod" => "audio/mod",
".mod" => "audio/x-mod",
".moov" => "video/quicktime",
".mov" => "video/quicktime",
".movie" => "video/x-sgi-movie",
".mp2" => "audio/mpeg",
".mp2" => "audio/x-mpeg",
".mp2" => "video/mpeg",
".mp2" => "video/x-mpeg",
".mp2" => "video/x-mpeq2a",
".mp3" => "audio/mpeg3",
".mp3" => "audio/x-mpeg-3",
".mp3" => "video/mpeg",
".mp3" => "video/x-mpeg",
".mpa" => "audio/mpeg",
".mpa" => "video/mpeg",
".mpc" => "application/x-project",
".mpe" => "video/mpeg",
".mpeg" => "video/mpeg",
".mpg" => "audio/mpeg",
".mpg" => "video/mpeg",
".mpga" => "audio/mpeg",
".mpp" => "application/vnd.ms-project",
".mpt" => "application/x-project",
".mpv" => "application/x-project",
".mpx" => "application/x-project",
".mrc" => "application/marc",
".ms" => "application/x-troff-ms",
".mv" => "video/x-sgi-movie",
".my" => "audio/make",
".mzz" => "application/x-vnd.audioexplosion.mzz",
".nap" => "image/naplps",
".naplps" => "image/naplps",
".nc" => "application/x-netcdf",
".ncm" => "application/vnd.nokia.configuration-message",
".nif" => "image/x-niff",
".niff" => "image/x-niff",
".nix" => "application/x-mix-transfer",
".nsc" => "application/x-conference",
".nvd" => "application/x-navidoc",
".o" => "application/octet-stream",
".oda" => "application/oda",
".omc" => "application/x-omc",
".omcd" => "application/x-omcdatamaker",
".omcr" => "application/x-omcregerator",
".p" => "text/x-pascal",
".p10" => "application/pkcs10",
".p10" => "application/x-pkcs10",
".p12" => "application/pkcs-12",
".p12" => "application/x-pkcs12",
".p7a" => "application/x-pkcs7-signature",
".p7c" => "application/pkcs7-mime",
".p7c" => "application/x-pkcs7-mime",
".p7m" => "application/pkcs7-mime",
".p7m" => "application/x-pkcs7-mime",
".p7r" => "application/x-pkcs7-certreqresp",
".p7s" => "application/pkcs7-signature",
".part" => "application/pro_eng",
".pas" => "text/pascal",
".pbm" => "image/x-portable-bitmap",
".pcl" => "application/vnd.hp-pcl",
".pcl" => "application/x-pcl",
".pct" => "image/x-pict",
".pcx" => "image/x-pcx",
".pdb" => "chemical/x-pdb",
".pdf" => "application/pdf",
".pfunk" => "audio/make",
".pfunk" => "audio/make.my.funk",
".pgm" => "image/x-portable-graymap",
".pgm" => "image/x-portable-greymap",
".pic" => "image/pict",
".pict" => "image/pict",
".pkg" => "application/x-newton-compatible-pkg",
".pko" => "application/vnd.ms-pki.pko",
".pl" => "text/plain",
".pl" => "text/x-script.perl",
".plx" => "application/x-pixclscript",
".pm" => "image/x-xpixmap",
".pm" => "text/x-script.perl-module",
".pm4" => "application/x-pagemaker",
".pm5" => "application/x-pagemaker",
".png" => "image/png",
".pnm" => "application/x-portable-anymap",
".pnm" => "image/x-portable-anymap",
".pot" => "application/mspowerpoint",
".pot" => "application/vnd.ms-powerpoint",
".pov" => "model/x-pov",
".ppa" => "application/vnd.ms-powerpoint",
".ppm" => "image/x-portable-pixmap",
".pps" => "application/mspowerpoint",
".pps" => "application/vnd.ms-powerpoint",
".ppt" => "application/mspowerpoint",
".ppt" => "application/powerpoint",
".ppt" => "application/vnd.ms-powerpoint",
".ppt" => "application/x-mspowerpoint",
".ppz" => "application/mspowerpoint",
".pre" => "application/x-freelance",
".prt" => "application/pro_eng",
".ps" => "application/postscript",
".psd" => "application/octet-stream",
".pvu" => "paleovu/x-pv",
".pwz" => "application/vnd.ms-powerpoint",
".py" => "text/x-script.phyton",
".pyc" => "applicaiton/x-bytecode.python",
".qcp" => "audio/vnd.qcelp",
".qd3" => "x-world/x-3dmf",
".qd3d" => "x-world/x-3dmf",
".qif" => "image/x-quicktime",
".qt" => "video/quicktime",
".qtc" => "video/x-qtc",
".qti" => "image/x-quicktime",
".qtif" => "image/x-quicktime",
".ra" => "audio/x-pn-realaudio",
".ra" => "audio/x-pn-realaudio-plugin",
".ra" => "audio/x-realaudio",
".ram" => "audio/x-pn-realaudio",
".ras" => "application/x-cmu-raster",
".ras" => "image/cmu-raster",
".ras" => "image/x-cmu-raster",
".rast" => "image/cmu-raster",
".rexx" => "text/x-script.rexx",
".rf" => "image/vnd.rn-realflash",
".rgb" => "image/x-rgb",
".rm" => "application/vnd.rn-realmedia",
".rm" => "audio/x-pn-realaudio",
".rmi" => "audio/mid",
".rmm" => "audio/x-pn-realaudio",
".rmp" => "audio/x-pn-realaudio",
".rmp" => "audio/x-pn-realaudio-plugin",
".rng" => "application/ringing-tones",
".rng" => "application/vnd.nokia.ringing-tone",
".rnx" => "application/vnd.rn-realplayer",
".roff" => "application/x-troff",
".rp" => "image/vnd.rn-realpix",
".rpm" => "audio/x-pn-realaudio-plugin",
".rt" => "text/richtext",
".rt" => "text/vnd.rn-realtext",
".rtf" => "application/rtf",
".rtf" => "application/x-rtf",
".rtf" => "text/richtext",
".rtx" => "application/rtf",
".rtx" => "text/richtext",
".rv" => "video/vnd.rn-realvideo",
".s" => "text/x-asm",
".s3m" => "audio/s3m",
".saveme" => "application/octet-stream",
".sbk" => "application/x-tbook",
".scm" => "application/x-lotusscreencam",
".scm" => "text/x-script.guile",
".scm" => "text/x-script.scheme",
".scm" => "video/x-scm",
".sdml" => "text/plain",
".sdp" => "application/sdp",
".sdp" => "application/x-sdp",
".sdr" => "application/sounder",
".sea" => "application/sea",
".sea" => "application/x-sea",
".set" => "application/set",
".sgm" => "text/sgml",
".sgm" => "text/x-sgml",
".sgml" => "text/sgml",
".sgml" => "text/x-sgml",
".sh" => "application/x-bsh",
".sh" => "application/x-sh",
".sh" => "application/x-shar",
".sh" => "text/x-script.sh",
".shar" => "application/x-bsh",
".shar" => "application/x-shar",
".shtml" => "text/html",
".shtml" => "text/x-server-parsed-html",
".sid" => "audio/x-psid",
".sit" => "application/x-sit",
".sit" => "application/x-stuffit",
".skd" => "application/x-koan",
".skm" => "application/x-koan",
".skp" => "application/x-koan",
".skt" => "application/x-koan",
".sl" => "application/x-seelogo",
".smi" => "application/smil",
".smil" => "application/smil",
".snd" => "audio/basic",
".snd" => "audio/x-adpcm",
".sol" => "application/solids",
".spc" => "application/x-pkcs7-certificates",
".spc" => "text/x-speech",
".spl" => "application/futuresplash",
".spr" => "application/x-sprite",
".sprite" => "application/x-sprite",
".src" => "application/x-wais-source",
".ssi" => "text/x-server-parsed-html",
".ssm" => "application/streamingmedia",
".sst" => "application/vnd.ms-pki.certstore",
".step" => "application/step",
".stl" => "application/sla",
".stl" => "application/vnd.ms-pki.stl",
".stl" => "application/x-navistyle",
".stp" => "application/step",
".sv4cpio" => "application/x-sv4cpio",
".sv4crc" => "application/x-sv4crc",
".svf" => "image/vnd.dwg",
".svf" => "image/x-dwg",
".svr" => "application/x-world",
".svr" => "x-world/x-svr",
".swf" => "application/x-shockwave-flash",
".t" => "application/x-troff",
".talk" => "text/x-speech",
".tar" => "application/x-tar",
".tbk" => "application/toolbook",
".tbk" => "application/x-tbook",
".tcl" => "application/x-tcl",
".tcl" => "text/x-script.tcl",
".tcsh" => "text/x-script.tcsh",
".tex" => "application/x-tex",
".texi" => "application/x-texinfo",
".texinfo" => "application/x-texinfo",
".text" => "application/plain",
".text" => "text/plain",
".tgz" => "application/gnutar",
".tgz" => "application/x-compressed",
".tif" => "image/tiff",
".tif" => "image/x-tiff",
".tiff" => "image/tiff",
".tiff" => "image/x-tiff",
".tr" => "application/x-troff",
".tsi" => "audio/tsp-audio",
".tsp" => "application/dsptype",
".tsp" => "audio/tsplayer",
".tsv" => "text/tab-separated-values",
".turbot" => "image/florian",
".txt" => "text/plain",
".uil" => "text/x-uil",
".uni" => "text/uri-list",
".unis" => "text/uri-list",
".unv" => "application/i-deas",
".uri" => "text/uri-list",
".uris" => "text/uri-list",
".ustar" => "application/x-ustar",
".ustar" => "multipart/x-ustar",
".uu" => "application/octet-stream",
".uu" => "text/x-uuencode",
".uue" => "text/x-uuencode",
".vcd" => "application/x-cdlink",
".vcs" => "text/x-vcalendar",
".vda" => "application/vda",
".vdo" => "video/vdo",
".vew" => "application/groupwise",
".viv" => "video/vivo",
".viv" => "video/vnd.vivo",
".vivo" => "video/vivo",
".vivo" => "video/vnd.vivo",
".vmd" => "application/vocaltec-media-desc",
".vmf" => "application/vocaltec-media-file",
".voc" => "audio/voc",
".voc" => "audio/x-voc",
".vos" => "video/vosaic",
".vox" => "audio/voxware",
".vqe" => "audio/x-twinvq-plugin",
".vqf" => "audio/x-twinvq",
".vql" => "audio/x-twinvq-plugin",
".vrml" => "application/x-vrml",
".vrml" => "model/vrml",
".vrml" => "x-world/x-vrml",
".vrt" => "x-world/x-vrt",
".vsd" => "application/x-visio",
".vst" => "application/x-visio",
".vsw" => "application/x-visio",
".w60" => "application/wordperfect6.0",
".w61" => "application/wordperfect6.1",
".w6w" => "application/msword",
".wav" => "audio/wav",
".wav" => "audio/x-wav",
".wb1" => "application/x-qpro",
".wbmp" => "image/vnd.wap.wbmp",
".web" => "application/vnd.xara",
".wiz" => "application/msword",
".wk1" => "application/x-123",
".wmf" => "windows/metafile",
".wml" => "text/vnd.wap.wml",
".wmlc" => "application/vnd.wap.wmlc",
".wmls" => "text/vnd.wap.wmlscript",
".wmlsc" => "application/vnd.wap.wmlscriptc",
".word" => "application/msword",
".wp" => "application/wordperfect",
".wp5" => "application/wordperfect",
".wp5" => "application/wordperfect6.0",
".wp6" => "application/wordperfect",
".wpd" => "application/wordperfect",
".wpd" => "application/x-wpwin",
".wq1" => "application/x-lotus",
".wri" => "application/mswrite",
".wri" => "application/x-wri",
".wrl" => "application/x-world",
".wrl" => "model/vrml",
".wrl" => "x-world/x-vrml",
".wrz" => "model/vrml",
".wrz" => "x-world/x-vrml",
".wsc" => "text/scriplet",
".wsrc" => "application/x-wais-source",
".wtk" => "application/x-wintalk",
".xbm" => "image/x-xbitmap",
".xbm" => "image/x-xbm",
".xbm" => "image/xbm",
".xdr" => "video/x-amt-demorun",
".xgz" => "xgl/drawing",
".xif" => "image/vnd.xiff",
".xl" => "application/excel",
".xla" => "application/excel",
".xla" => "application/x-excel",
".xla" => "application/x-msexcel",
".xlb" => "application/excel",
".xlb" => "application/vnd.ms-excel",
".xlb" => "application/x-excel",
".xlc" => "application/excel",
".xlc" => "application/vnd.ms-excel",
".xlc" => "application/x-excel",
".xld" => "application/excel",
".xld" => "application/x-excel",
".xlk" => "application/excel",
".xlk" => "application/x-excel",
".xll" => "application/excel",
".xll" => "application/vnd.ms-excel",
".xll" => "application/x-excel",
".xlm" => "application/excel",
".xlm" => "application/vnd.ms-excel",
".xlm" => "application/x-excel",
".xls" => "application/excel",
".xls" => "application/vnd.ms-excel",
".xls" => "application/x-excel",
".xls" => "application/x-msexcel",
".xlt" => "application/excel",
".xlt" => "application/x-excel",
".xlv" => "application/excel",
".xlv" => "application/x-excel",
".xlw" => "application/excel",
".xlw" => "application/vnd.ms-excel",
".xlw" => "application/x-excel",
".xlw" => "application/x-msexcel",
".xm" => "audio/xm",
".xml" => "application/xml",
".xml" => "text/xml",
".xmz" => "xgl/movie",
".xpix" => "application/x-vnd.ls-xpix",
".xpm" => "image/x-xpixmap",
".xpm" => "image/xpm",
".x-png" => "image/png",
".xsr" => "video/x-amt-showrun",
".xwd" => "image/x-xwd",
".xwd" => "image/x-xwindowdump",
".xyz" => "chemical/x-pdb",
".z" => "application/x-compress",
".z" => "application/x-compressed",
".zip" => "application/x-compressed",
".zip" => "application/x-zip-compressed",
".zip" => "application/zip",
".zip" => "multipart/x-zip",
".zoo" => "application/octet-stream",
".zsh" => "text/x-script.zsh"
}
In lib/core_extensions.rb - this needs to be required somewhere in your config.
class File
def self.guess_filetype(filename)
`file --mime -b "#{filename}"`.split(";").first || MIME_TYPES_FROM_EXTENSION[File.extname(filename)]
end
end
Finally, in the controller, using your example, in the send_file call, i would do
:type=> File.guess_filetype(#uploadedfile.name)
The guess_filetype method makes a shell call to file, which is a command line utility. http://en.wikipedia.org/wiki/File_(command)
If file can't get the mimetype (it usually does, it's pretty good), then i fall back to my massive list of known mime types from extension, stored in that constant.
The reason i do file first, rather than just rely on the list of extensions, is that file looks inside the actual content of the file itself, so if somebody renamed a file's extension, file wouldn't be fooled: it would still know what mime type to return.
I solved this problem by making a slight change on the def file_extension to
def file_extension
up = Uploadedfile.find(params[:id])
ext = File.extname("#{up.upload_file}")
if (ext == ".pdf")
"application/pdf"
elsif (ext == ".doc") || ( ext == ".rtf") || ( ext == ".docx")
"application/vnd.openxmlformats-officedocument.wordprocessingml.document"
elsif (ext == ".txt")
"text/Plain"
elsif (ext == ".rar")
"Application/x-rar-compressed"
elsif (ext == ".jpeg" || ext==".jpg")
"image/jpeg"
else
"Application/octet-stream"
end
end
I changed this part to ext = File.extname(#uploadedfile.name) to ext = File.extname("#{up.upload_file}") where up = Uploadedfile.find(params[:id])

Zend framework 2 - How to bind form data with a simple array

I'm looking for clean solution how to bind form data with array only?
I was trying to convert in to stdClass object with no result.
Form
class Product extends Form
{
public function __construct()
{
parent::__construct('add_product');
$this->setAttribute('method', 'post');
$this->add(array(
'name' => 'type',
'type' => 'Select',
'options' => array(
'label' => 'Product type:',
'value_options' => $this->getProductTypeCollection(),
//'empty_option' => '',
),
'attributes' => array(
'value' => 'simple',
'class' => 'select'
)
));
$this->add(array(
'name' => 'set',
'type' => 'Select',
'options' => array(
'label' => 'Product attribute set:',
'value_options' => $this->getAttributeSetCollection(),
),
'attributes' => array(
'class' => 'select'
)
));
$this->add(array(
'name' => 'categories',
'type' => 'MultiCheckbox',
'options' => array(
'label' => 'Categories:',
'value_options' => $this->getCategoryTree(),
),
'attributes' => array(
'class' => 'multi-checkbox'
)
));
$this->add(array(
'name' => 'websites',
'type' => 'Text',
'options' => array(
'label' => 'Website:',
),
'attributes' => array(
'class' => 'text',
'readonly' => 'readonly',
'value' => $session->magento_store_view_code,
)
));
}
}
In edit action:
$form = new ProductForm();
$form->bind($productData);
$productData is an array and it looks like this:
array (size=52)
'product_id' => string '6' (length=1)
'sku' => string '10/10/1992' (length=10)
'set' => string '4' (length=1)
'type' => string 'simple' (length=6)
'categories' =>
array (size=1)
0 => string '3' (length=1)
'websites' =>
array (size=1)
0 => string '1' (length=1)
'type_id' => string 'simple' (length=6)
'name' => string 'Front fog lights set crystal smoked VW Golf MK2, Jetta MK2' (length=58)
'description' => string 'Front fog lights set crystal smoked VW Golf MK2, Jetta MK2' (length=58)
'short_description' => string 'Front fog lights set crystal smoked VW Golf MK2, Jetta MK2' (length=58)
'weight' => string '2.0000' (length=6)
'old_id' => null
'news_from_date' => null
'news_to_date' => null
'status' => string '1' (length=1)
'url_key' => string 'front-fog-lights-set-crystal-smoked-vw-golf-mk2-jetta-mk2' (length=57)
'url_path' => string 'front-fog-lights-set-crystal-smoked-vw-golf-mk2-jetta-mk2.html' (length=62)
'visibility' => string '4' (length=1)
'category_ids' =>
array (size=1)
0 => string '3' (length=1)
'required_options' => string '0' (length=1)
'price' => string '49.9900' (length=7)
...
Regards,
change this
$form = new ProductForm();
$form->bind($productData);
to this
$product = new Product();
$product->exchangeArray(get_object_vars($productData));
$form=new ProductForm();
$form->bind($product);
$form->get('submit')->setValue('Save');

Set the dynamic values in drop down in ZF2

I am using Zend Framework 2 and I would like to understand how I can add values to a drop down that is coming from a database.
The code is here:
$this->add(
array(
'name' => 'role',
'type' => 'Zend\Form\Element\Select',
'option' => array(
'label' => 'Role',
'value_option' => $roleData
)
)
);
Here the $roleData as an array and the value of array is as follows:
Array ( [0] => Array ( [id] => 1 [cell] => admin ) [1] => Array ( [id] => 2 [cell] => member ) [2] => Array ( [id] => 3 [cell] => guest ) [3] => Array ( [id] => 4 [cell] => Admina1 ) [4] => Array ( [id] => 5 [cell] => Admina1 ) )
Try 'value_options' instead of 'value_option'.
And your array has to be the following structure:
$options = array(
'1' => 'admin',
'2' => 'member',
'3' => 'guest',
'4' => 'Admina1',
'5' => 'Admina1'
);
$this->add(array(
'name' => 'yesorno',
'type' => 'Zend\Form\Element\Select',
'options' => array(
'label' => 'Yes or No Label',
'value_options' => array(
0 => 'No',
1 => 'Yes'
)
),
));

Google Docs API - Zend GData - Create new doc - 400 Bad Request - Unable to convert document - Intermittent

I am using Zend GData to upload documents to Google docs.
The code works fine, except once in a while, it raises exception:
400 Bad Request - Unable to convert document.
This is an intermittent issue. So I believe the code is not a problem.
try {
$test=$sharedocs->insertEntry($dataShare, $uri, 'Zend_Gdata_Entry',$header);
} catch (Exception $e ) {
echo $e->getMessage();
exit();
}
Here is the exception
Zend_Gdata_App_HttpException Object
(
[_httpClientException:protected] =>
[_response:protected] => Zend_Http_Response Object
(
[version:protected] => 1.1
[code:protected] => 400
[message:protected] => Bad Request
[headers:protected] => Array
(
[Content-type] => text/html; charset=UTF-8
[Date] => Fri, 14 Dec 2012 23:32:18 GMT
[Expires] => Fri, 14 Dec 2012 23:32:18 GMT
[Cache-control] => private, max-age=0
[X-content-type-options] => nosniff
[X-frame-options] => SAMEORIGIN
[X-xss-protection] => 1; mode=block
[Server] => GSE
[Connection] => close
)
[body:protected] => Unable to convert document.
)
[_previous:Zend_Exception:private] =>
[message:protected] => Expected response code 200, got 400
Unable to convert document.
[string:Exception:private] =>
[code:protected] => 0
[file:protected] => /usr/local/zend/share/ZendFramework/library/Zend/Gdata/App.php
[line:protected] => 714
[trace:Exception:private] => Array
(
[0] => Array
(
[file] => /usr/local/zend/share/ZendFramework/library/Zend/Gdata.php
[line] => 219
[function] => performHttpRequest
[class] => Zend_Gdata_App
[type] => ->
[args] => Array
(
[0] => POST
[1] => https://docs.google.com/feeds/documents/private/full
[2] => Array
(
[0] => Content-Type: multipart/related; boundary="END_OF_PART"
[1] => Slug: test.doc
[2] => Content-Type: application/msword
[3] => resourceId:4321
[x-http-method-override] =>
[authorization] => AuthSub token="xxxxx"
)
[3] =>
Room for Debate (12345)
[4] => application/atom+xml
[5] =>
)
)
[1] => Array
(
[file] => /usr/local/zend/share/ZendFramework/library/Zend/Gdata/App.php
[line] => 905
[function] => performHttpRequest
[class] => Zend_Gdata
[type] => ->
[args] => Array
(
[0] => POST
[1] => https://docs.google.com/feeds/documents/private/full
[2] => Array
(
[0] => Content-Type: multipart/related; boundary="END_OF_PART"
[1] => Slug: test.doc
[2] => Content-Type: application/msword
[3] => resourceId:4321
[x-http-method-override] =>
)
[3] =>
Room for Debate (12345)
[4] => application/atom+xml
)
)
[2] => Array
(
[file] => /usr/local/zend/share/ZendFramework/library/Zend/Gdata/App.php
[line] => 980
[function] => post
[class] => Zend_Gdata_App
[type] => ->
[args] => Array
(
[0] =>
Room for Debate (12345)
[1] =>
[2] =>
[3] =>
[4] => Array
(
[0] => Content-Type: multipart/related; boundary="END_OF_PART"
[1] => Slug: test.doc
[2] => Content-Type: application/msword
[3] => resourceId:4321
)
)
)
[3] => Array
(
[file] => /var/www/GoogleFunctions.php
[line] => 90
[function] => insertEntry
[class] => Zend_Gdata_App
[type] => ->
[args] => Array
(
[0] =>
Room for Debate (12345)
[1] =>
[2] => Zend_Gdata_Entry
[3] => Array
(
[0] => Content-Type: multipart/related; boundary="END_OF_PART"
[1] => Slug: test.doc
[2] => Content-Type: application/msword
[3] => resourceId:4321
)
)
)
[4] => Array
(
[file] => /var/www/myPaper.php
[line] => 342
[function] => createNewDoc
[args] => Array
(
[0] => Room for Debate (12345)
[1] => Zend_Gdata_Docs Object
(
[_defaultPostUri:protected] => https://docs.google.com/feeds/documents/private/full
[_registeredPackages:protected] => Array
(
[0] => Zend_Gdata_Docs
[1] => Zend_Gdata_Kind
[2] => Zend_Gdata_Extension
[3] => Zend_Gdata
[4] => Zend_Gdata_App_Extension
[5] => Zend_Gdata_App
)
[_httpClient:protected] => Zend_Gdata_HttpClient Object
(
[_authSubPrivateKeyId:Zend_Gdata_HttpClient:private] =>
[_authSubToken:Zend_Gdata_HttpClient:private] => 1/xxxxx
[_clientLoginToken:Zend_Gdata_HttpClient:private] =>
[_clientLoginKey:Zend_Gdata_HttpClient:private] =>
[_streamingRequest:protected] =>
[config:protected] => Array
(
[maxredirects] => 0
[strictredirects] => 1
[useragent] => Zend_Framework_Gdata/1.11.12
[timeout] => 10
[adapter] => Zend_Http_Client_Adapter_Socket
[httpversion] => 1.1
[keepalive] =>
[storeresponse] => 1
[strict] => 1
[output_stream] =>
[encodecookies] => 1
[rfc3986_strict] =>
)
[adapter:protected] => Zend_Http_Client_Adapter_Socket Object
(
[socket:protected] =>
[connected_to:protected] => Array
(
[0] =>
[1] =>
)
[out_stream:protected] =>
[config:protected] => Array
(
[persistent] =>
[ssltransport] => ssl
[sslcert] =>
[sslpassphrase] =>
[sslusecontext] =>
[maxredirects] => 0
[strictredirects] => 1
[useragent] => Zend_Framework_Gdata/1.11.12
[timeout] => 10
[httpversion] => 1.1
[keepalive] =>
[storeresponse] => 1
[strict] => 1
[output_stream] =>
[encodecookies] => 1
[rfc3986_strict] =>
)
[method:protected] => POST
[_context:protected] => Resource id #10
)
[uri:protected] => Zend_Uri_Http Object
(
[_username:protected] =>
[_password:protected] =>
[_host:protected] => docs.google.com
[_port:protected] => 443
[_path:protected] => /feeds/documents/private/full
[_query:protected] =>
[_fragment:protected] =>
[_regex:protected] => Array
(
[escaped] => %[[:xdigit:]]{2}
[unreserved] => [A-Za-z0-9-_.!~*'()\[\]]
[segment] => (?:%[[:xdigit:]]{2}|[A-Za-z0-9-_.!~*'()\[\]:#&=+$,;])*
[path] => (?:\/(?:(?:%[[:xdigit:]]{2}|[A-Za-z0-9-_.!~*'()\[\]:#&=+$,;])*)?)+
[uric] => (?:%[[:xdigit:]]{2}|[A-Za-z0-9-_.!~*'()\[\];\/?:#&=+$,])
)
[_scheme:protected] => https
)
[headers:protected] => Array
(
[user-agent] => Array
(
[0] => User-Agent
[1] => MyCompany-MyApp-1.0 Zend_Framework_Gdata/1.11.12
)
[content-type] => Array
(
[0] => Content-Type
[1] => application/atom+xml
)
[slug] => Array
(
[0] => Slug
[1] => test.doc
)
[resourceid] => Array
(
[0] => resourceId
[1] => 4321
)
[authorization] => Array
(
[0] => authorization
[1] => AuthSub token="1/xxxxx"
)
[accept-encoding] => Array
(
[0] => Accept-encoding
[1] => identity
)
[content-length] => Array
(
[0] => Content-Length
[1] => 273
)
)
[method:protected] => POST
[paramsGet:protected] => Array
(
)
[paramsPost:protected] => Array
(
)
[enctype:protected] => application/atom+xml
[raw_post_data:protected] =>
Room for Debate (12345)
[auth:protected] =>
[files:protected] => Array
(
)
[body_field_order:protected] => Array
(
[service] => SCALAR
)
[cookiejar:protected] =>
[last_request:protected] => POST /feeds/documents/private/full HTTP/1.1
Host: docs.google.com
Connection: close
User-Agent: MyCompany-MyApp-1.0 Zend_Framework_Gdata/1.11.12
Content-Type: application/atom+xml
Slug: test.doc
resourceId: 4321
authorization: AuthSub token="1/xxxxx"
Accept-encoding: identity
Content-Length: 273
Room for Debate (12345)
[last_response:protected] => Zend_Http_Response Object
(
[version:protected] => 1.1
[code:protected] => 400
[message:protected] => Bad Request
[headers:protected] => Array
(
[Content-type] => text/html; charset=UTF-8
[Date] => Fri, 14 Dec 2012 23:32:18 GMT
[Expires] => Fri, 14 Dec 2012 23:32:18 GMT
[Cache-control] => private, max-age=0
[X-content-type-options] => nosniff
[X-frame-options] => SAMEORIGIN
[X-xss-protection] => 1; mode=block
[Server] => GSE
[Connection] => close
)
[body:protected] => Unable to convert document.
)
[redirectCounter:protected] => 0
[_unmaskStatus:protected] =>
[_queryBracketsEscaped:protected] => 1
)
[_majorProtocolVersion:protected] => 1
[_minorProtocolVersion:protected] =>
[_useObjectMapping:protected] => 1
)
)
)
)
[previous:Exception:private] =>
)
Ohh, so I answered somebodys question on same lines and forgot to put it on my question. :D
(https://stackoverflow.com/a/14290948/1736522)
Google Docs/Drive API does not permit a new document to be inserted into a new Google account

Rails 3.1 - Split Column on Data import?

I'm importing sales data from iTunes successfully using:
FasterCSV.parse(uploaded_io, {:headers => true, :col_sep =>"\t"}).each do |row_data|
new_record = AppleSale.new(
'provider' => row_data[0],
'provider_country' => row_data[1],
'vendor_identifier' => row_data[2],
'upc' => row_data[3],
'isrc' => row_data[4],
'artist_show' => row_data[5],
'title' => row_data[6],
'label_studio_network' => row_data[7],
'product_type_identifier' => row_data[8],
'units' => row_data[9],
'royalty_price' => row_data[10],
'download_date' => row_data[11],
'order_id' => row_data[12],
'postal_code' => row_data[13],
'customer_identifier' => row_data[14],
'report_date' => row_data[15],
'sale_return' => row_data[16],
'customer_currency' => row_data[17],
'country_code' => row_data[18],
'royalty_currency' => row_data[19],
'preorder' => row_data[20],
'isan' => row_data[21],
'customer_price' => row_data[22],
'apple_identifier' => row_data[23],
'cma' => row_data[24],
'asset_content_flavor' => row_data[25],
'vendor_order_code' => row_data[26],
'grid' => row_data[27],
'promo_code' => row_data[28],
'parent_identifier' => row_data[29]
)
new_record.save
end
'vendor_order_code' however contains values like '0711297494143_CADE70900648' that i'd like to split on the underscore and store in two separate (new) columns. Not all entries have a value like this, some just contain the first part (a UPC). I realise there are already UPC and ISRC columns provided but these aren't populated in a way that's useful to me, splitting the vendor_order_code is the only way I can do what I need to do.
Can anyone suggest the correct way of doing this? I know the below is complete nonsense, but i'm thinking something along the lines of:
'vendor_order_code' => row_data[26],
'vendor_order_code_UPC' => row_data[26].split("_")...and save just the first half regardless of whether split occurred.
'vendor_order_code_ISRC' => row_data[26].split("_")..and save just the second half if it exists
No need for multiple splits and/or conditionals; just match once per row.
FasterCSV.parse(uploaded_io, {:headers => true, :col_sep =>"\t"}).each do |row_data|
full, upc, _discard, isrc = row_data[26].match(/^([^_]+)(_(.+))?/).to_a
new_record = AppleSale.new(
'provider' => row_data[0],
'provider_country' => row_data[1],
'vendor_identifier' => row_data[2],
'upc' => row_data[3],
'isrc' => row_data[4],
'artist_show' => row_data[5],
'title' => row_data[6],
'label_studio_network' => row_data[7],
'product_type_identifier' => row_data[8],
'units' => row_data[9],
'royalty_price' => row_data[10],
'download_date' => row_data[11],
'order_id' => row_data[12],
'postal_code' => row_data[13],
'customer_identifier' => row_data[14],
'report_date' => row_data[15],
'sale_return' => row_data[16],
'customer_currency' => row_data[17],
'country_code' => row_data[18],
'royalty_currency' => row_data[19],
'preorder' => row_data[20],
'isan' => row_data[21],
'customer_price' => row_data[22],
'apple_identifier' => row_data[23],
'cma' => row_data[24],
'asset_content_flavor' => row_data[25],
'vendor_order_code' => full,
'vendor_order_code_UPC' => upc,
'vendor_order_code_ISRC' => isrc,
'grid' => row_data[27],
'promo_code' => row_data[28],
'parent_identifier' => row_data[29]
)
new_record.save
end
You can try:
'vendor_order_code' => row_data[26],
'vendor_order_code_UPC' => row_data[26].split("_").first
'vendor_order_code_ISRC' => row_data[26].split("_").last if row_data[26].match(/_/)

Resources